为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 pkcs12 存储加载 x509 密钥对?

如何从 pkcs12 存储加载 x509 密钥对?

Go
慕后森 2023-07-10 10:54:51
我有一个通过 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。


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信