golang,我可以使用 rsa 密钥创建 X509KeyPair 吗?
golang, can i create X509KeyPair using rsa key?
我正尝试按照此博客 Secure gRPC with TLS/SSL 上的说明使用相互 tls 创建 gRPC 连接,但我不想创建证书并将其保存到磁盘上的文件中,我想要服务本身来创建它的密钥,然后证书颁发机构密钥将被带到其他地方(我计划使用 google pki 作为 ca)。
到目前为止,我可以使用 rsa 创建 private/public 密钥对,然后按照此处的一些代码将 public 密钥编码为 pem 密钥 Golang : Generate DSA private, public key and PEM files example now i am stock on how to create the certificate using the LoadX509KeyPair。我不知道从哪里获取第二个参数的值,它需要以字节为单位的 keyPemBlock,但 RSA 私钥不是以字节为单位。
我想问一下,如果可能的话,是否有更好的方法使用 RSA 创建证书?
另外,如果我们可以使用 RSA 创建证书;使用上面我的不完整解决方案,我可以获得 tls.LoadX509KeyPair
?
第二个参数的值
谢谢
如果您想生成自己的证书和私钥,您必须这样做:
1.- 生成私钥:
key, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
log.Fatal("Private key cannot be created.", err.Error())
}
// Generate a pem block with the private key
keyPem := pem.EncodeToMemory(&pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(key),
})
2.- 生成证书:
tml := x509.Certificate{
// you can add any attr that you need
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(5, 0, 0),
// you have to generate a different serial number each execution
SerialNumber: big.NewInt(123123),
Subject: pkix.Name{
CommonName: "New Name",
Organization: []string{"New Org."},
},
BasicConstraintsValid: true,
}
cert, err := x509.CreateCertificate(rand.Reader, &tml, &tml, &key.PublicKey, key)
if err != nil {
log.Fatal("Certificate cannot be created.", err.Error())
}
// Generate a pem block with the certificate
certPem := pem.EncodeToMemory(&pem.Block{
Type: "CERTIFICATE",
Bytes: cert,
})
3.- 加载 certificate/private 密钥对:
tlsCert, err := tls.X509KeyPair(certPem, keyPem)
if err != nil {
log.Fatal("Cannot be loaded the certificate.", err.Error())
}
4.- 使用 tlsCert
为任何你想要的,例如:
l, err := tls.Listen("tcp", ":8080", &tls.Config{
Certificates: []tls.Certificate{tlsCert},
})
我正尝试按照此博客 Secure gRPC with TLS/SSL 上的说明使用相互 tls 创建 gRPC 连接,但我不想创建证书并将其保存到磁盘上的文件中,我想要服务本身来创建它的密钥,然后证书颁发机构密钥将被带到其他地方(我计划使用 google pki 作为 ca)。
到目前为止,我可以使用 rsa 创建 private/public 密钥对,然后按照此处的一些代码将 public 密钥编码为 pem 密钥 Golang : Generate DSA private, public key and PEM files example now i am stock on how to create the certificate using the LoadX509KeyPair。我不知道从哪里获取第二个参数的值,它需要以字节为单位的 keyPemBlock,但 RSA 私钥不是以字节为单位。
我想问一下,如果可能的话,是否有更好的方法使用 RSA 创建证书?
另外,如果我们可以使用 RSA 创建证书;使用上面我的不完整解决方案,我可以获得 tls.LoadX509KeyPair
?
谢谢
如果您想生成自己的证书和私钥,您必须这样做:
1.- 生成私钥:
key, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
log.Fatal("Private key cannot be created.", err.Error())
}
// Generate a pem block with the private key
keyPem := pem.EncodeToMemory(&pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(key),
})
2.- 生成证书:
tml := x509.Certificate{
// you can add any attr that you need
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(5, 0, 0),
// you have to generate a different serial number each execution
SerialNumber: big.NewInt(123123),
Subject: pkix.Name{
CommonName: "New Name",
Organization: []string{"New Org."},
},
BasicConstraintsValid: true,
}
cert, err := x509.CreateCertificate(rand.Reader, &tml, &tml, &key.PublicKey, key)
if err != nil {
log.Fatal("Certificate cannot be created.", err.Error())
}
// Generate a pem block with the certificate
certPem := pem.EncodeToMemory(&pem.Block{
Type: "CERTIFICATE",
Bytes: cert,
})
3.- 加载 certificate/private 密钥对:
tlsCert, err := tls.X509KeyPair(certPem, keyPem)
if err != nil {
log.Fatal("Cannot be loaded the certificate.", err.Error())
}
4.- 使用 tlsCert
为任何你想要的,例如:
l, err := tls.Listen("tcp", ":8080", &tls.Config{
Certificates: []tls.Certificate{tlsCert},
})