如何向证书添加私钥

时间:2019-05-11 11:03:03

标签: go

我正在尝试使用Go-in-one实用程序创建可创建csr的文件,然后发送它,然后(由安全人员批准后)获得签名证书,最后创建证书+私有证书以将其添加到浏览器或系统中。

现在,我可以做所有事情直到最终完成:在签名证书中添加私有证书。使用openssl我可以通过以下方式做到这一点:

openssl pkcs12 -export -out sergo.kurbanov.p12 -in sergo.kurbanov.crt -inkey sergo.kurbanov.key -name "Sergo Kurbanov"

有人可以在Go中建议如何做吗?

P.S。我正在使用Dogtag证书系统

1 个答案:

答案 0 :(得分:0)

我找到了决定:不幸的是,标准的Go pkcs12库没有包含所需的功能,但是有HashiCorp的版本“ github.com/hashicorp/packer/builder/azure/pkcs12” 程序包功能:

// Read our key created by openssl genrsa -out... or by Go 
// rsa.GenerateKey/EncryptPEMBlock...
pemKey,_ := ioutil.ReadFile("private.key")

// Convert pem to rsa key because it required for pkcs12.Encode
var rsaKey *rsa.PrivateKey
rsaKey,_ = dogtag.PemToRSA(pemKey,"our_private_secret")

// Get signed cert from dogtag CMS
var cert *x509.Certificate
cert,_ = dogtag.GetCert("0xF0F05A8")

// Create combined certificate
pfx,_ := pkcs12.Encode(cert.Raw, pemKey, "somesecret")

outFile,_ := os.Create("priv_plus_cert.p12")
defer outFile.Close()
outFile.Write(pfx)

最后,我们获得了适合添加到钥匙串或浏览器的证书。