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

在 Go 中生成 X.509 证书时出错

在 Go 中生成 X.509 证书时出错

Go
德玛西亚99 2021-11-22 18:13:01
我是使用 Go 的新手,我正在尝试使用以下代码生成 X.509 证书:cert, err := x509.CreateCertificate(    random,    &certTemplate,    cert,    publicKey,    privateKey)其中 publicKey 变量的类型为 interface{},它是调用 x509.ParsePKIXPublicKey(bytes) 的结果。我遇到的错误是:x509:仅支持 RSA 和 ECDSA 公钥我得出的结论是,这是将输入为 interface{} 的 publicKey 传递给 x509.CreateCertificate 函数的结果,因为它与该函数内的类型开关不匹配。我尝试以相同的结果传递 &publicKey。我还尝试使用 publicKey 进行类型断言,如下所示:var pk *ecdsa.PublicKeypk = publicKey.(*ecdsa.PublicKey)cert, err := x509.CreateCertificate(    random,    &certTemplate,    cert,    pk,    privateKey)但后来我收到此错误:panic: interface conversion: interface {} is nil, not *ecdsa.PublicKey如果我将 &pk 作为参数传递,则会发生同样的错误。这就是我生成公钥的方式:// Generate key paircurve := elliptic.P384()privateKey := new(ecdsa.PrivateKey)privateKey, err := ecdsa.GenerateKey(curve, rand.Reader)publicKey := &privatekey.PublicKey// Obtain bytes from public key for communication using protobufpublicKeyBytes, err := x509.MarshalPKIXPublicKey(publicKey)// Protobuf communication takes place herereceivedPublicKey, err := x509.ParsePKIXPublicKey(publicKeyBytes)// verification of public key here (the verification ends successfully)// populate X.509 template// create certificatecertificate, err := x509.CreateCertificate(    random,    &certificateTemplate,    certificate,    receivedPublicKey,    privateKey,)如果有人能指出我正确的方向或知道如何解决这个问题,那将非常有帮助。提前致谢!
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

我让它工作做这样的事情:


// Generate key pair

curve := elliptic.P384()

//privateKey := new(ecdsa.PrivateKey)

privateKey, err := ecdsa.GenerateKey(curve, rand.Reader)

publicKey := &privateKey.PublicKey

其余的与您所写的完全一样,看看您是否可以反映这一点并使其工作。


查看完整回答
反对 回复 2021-11-22
?
繁花如伊

TA贡献2012条经验 获得超12个赞

crypto/tls包包含一个名为的文件generate_cert.go,该文件显示了生成自签名证书的正确且惯用的方法。

你可以在这里找到它:https : //golang.org/src/crypto/tls/generate_cert.go

或者通过浏览安装 Go 的文件系统位置的 tls 包目录中的文件。

有很多事情应该正确完成,但不能一一列举,阅读、运行、修改和理解代码是在生成证书时掌握如何使用加密包的最佳方式。

特别要注意您x509.CreateCertificate作为公钥和私钥传递给函数的内容。在加密包中,密钥的interface{}类型愉快而危险地将编译时类型检查转换为运行时类型检查。


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 252 浏览
慕课专栏
更多

添加回答

举报

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