// certx 包示例:自签证书生成与解析、私钥解析、证书私钥匹配校验(全程内存操作) package main import ( "fmt" "git.zeroonesoft.cn/golib/zogo/certx" ) func main() { // 生成自签名证书(RSA 2048,有效期 10 年) certPEM, keyPEM, err := certx.CreateCertificate("go-hua.example.com", []string{"go-hua.example.com", "localhost"}) if err != nil { panic(err) } fmt.Printf("证书 PEM: %d 字节, 私钥 PEM: %d 字节\n", len(certPEM), len(keyPEM)) // 解析证书 cert, err := certx.ParseCertificate(certPEM) if err != nil { panic(err) } fmt.Println("主题:", cert.Subject.CommonName) fmt.Println("DNS 名称:", cert.DNSNames) fmt.Println("有效期至:", cert.NotAfter.Format("2006-01-02")) // 解析私钥(自动尝试 PKCS1 / PKCS8 / EC) key, err := certx.ParsePrivateKey(keyPEM) if err != nil { panic(err) } fmt.Printf("私钥类型: %T\n", key) // 校验证书与私钥是否匹配 fmt.Println("证书私钥匹配:", certx.VerifyPrivateKey(cert, keyPEM) == nil) // 实际 TLS 服务中的用法: // certPair, _ := tls.X509KeyPair(certPEM, keyPEM) // tls.NewListener(listener, &tls.Config{Certificates: []tls.Certificate{certPair}}) }