如何为Go中的证书加载解密加密密钥文件?

时间:2018-01-17 18:38:01

标签: go x509certificate

我有一个证书文件和一个密钥文件,其中密钥文件使用密码加密。我试图在加载密钥对之前以编程方式解密密钥文件。

// Key file and cert file path
cf := filepath.Join(certPath, certFile)
kf := filepath.Join(certPath, keyFile)

//Read & decode the encrypted key file with the pass to make tls work
keyIn, err := ioutil.ReadFile(kf)
if err != nil {
    log.Error("Read key error", err)
    return nil, err
}

// Decode and decrypt our PEM block
decodedPEM, _ := pem.Decode([]byte(keyIn))
decrypedPemBlock, err := x509.DecryptPEMBlock(decodedPEM, []byte("somepassword"))
if err != nil {
    log.Error("decrypt key error", err)
    return nil, err
}

// Load our decrypted key pair
crt, err := tls.LoadX509KeyPair(cf, string(decrypedPemBlock))
if err != nil {
    log.Error("load key pair error", err)
    return nil, err
}

使用以下openssl参数生成原始证书和密钥

openssl req -new -newkey rsa:2048 -x509 -keyout $CA_CERT.key -out $CA_CERT -days $validity -passin "pass:$password" -passout "pass:$password" -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=$CN/emailAddress=$EMAIL"

变量被相应替换,$ password为“somepassword”

我尝试使用openssl rsa从命令行解密密钥,它可以正常使用上面的密码。

然而在Go中,我在tls.LoadX509KeyPair中收到错误,说明无效参数。

time="2018-01-17T18:57:40Z" level=error msg="load key pair error: open

我最好的猜测是关键编码可能搞砸了,我想知道我的代码是否有任何问题。

更新:添加了错误消息,似乎tls.LoadX509KeyPair无法理解格式,正如评论中指出的那样。

0 个答案:

没有答案