我有一个通过 OpenSSL 在服务器上创建 PKCS12 存储的脚本。我正在 Go 中开发 TLS/SSL 服务器,需要从创建的 PKCS12 存储加载密钥对。如何从 PCKS12 存储中提取密钥对并加载它们?这是我的代码片段,它给了我一个错误:src/server.go:59:19: cannot use cert (type interface {}) as type []byte in argument to ioutil.WriteFile: need type assertionsrc/server.go:60:19: cannot use key (type *x509.Certificate) as type []byte in argument to ioutil.WriteFile import "golang.org/x/crypto/pkcs12" // Read byte data from pkcs12 keystore p12_data, err := ioutil.ReadFile("../identify.p12") if err != nil { log.Fatal(err) } // Extract cert and key from pkcs keystore cert, key, err := pkcs12.Decode(p12_data, "123456") if err != nil { log.Println(err) return }//Write cert and key out to filepathioutil.WriteFile("cert.pem", cert, 777)ioutil.WriteFile("key.pem", key, 777)log.SetFlags(log.Lshortfile)cer, err := tls.LoadX509KeyPair("cert.pem", "key.pem")if err != nil { log.Println(err) return}
1 回答
智慧大石
TA贡献1946条经验 获得超3个赞
您不需要使用 tls 包加载密钥对,因为 pkcs12.Decode 已经这样做了。只需初始化 tls.Certificate 类型的值:
p12_data, err := ioutil.ReadFile("../identify.p12")
if err != nil {
log.Fatal(err)
}
key, cert, err := pkcs12.Decode(p12_data, "123456") // Note the order of the return values.
if err != nil {
log.Fatal(err)
}
tlsCert := tls.Certificate{
Certificate: [][]byte{cert.Raw},
PrivateKey: key.(crypto.PrivateKey),
Leaf: cert,
}
引用文档:
该函数假设pfxData中只有一个证书和一个私钥;如果有更多,请使用 ToPEM 代替。
该文档包含一个示例,演示如何使用 ToPEM 初始化 tls.Certificate。
- 1 回答
- 0 关注
- 155 浏览
添加回答
举报
0/150
提交
取消