d2i_RSAPrivateKey无法解析RSA私钥

时间:2015-10-07 20:22:58

标签: openssl cryptography ssl-certificate rsa x509

我有一个使用openssl的d2i_RSAPrivateKey函数解析私有RSA密钥的函数。虽然所有这些密钥都是PEM编码的RSA密钥,但我发现这可以通过某些密钥成功,而不是其他密钥。我生成了自己签名的公钥和私钥,如下所示:

openssl x509 -inform PEM -modulus -in combined.pem 
Modulus=B59A...

openssl rsa -inform PEM -modulus -in combined.pem 
Modulus=B59A...

我将key.pem和cert.pem合并到一个文件combined.pem中,并验证我可以使用openssl的x509和rsa命令解析文件:

import os

cmd = 'dir'
fp = os.popen(cmd)
print(fp.read())  --Prints the results to the screen
res = fp.read()

fob = open('popen_output.txt','w')
fob.write(res)
fob.close()

fp.close()

但是d2i_RSAPrivateKey无法在代码中解析此文件,返回错误代码而不打印任何内容。我知道我正确使用d2i_RSAPrivateKey,因为它适用于不同的公共/私有证书文件。谁能说出为什么它无法解析我在命令行上创建的文件?

1 个答案:

答案 0 :(得分:2)

在与openssl开发人员的一个线程之后,结果发现我使用了错误的函数。我从d2i_RSAPrivateKey切换到d2i_PrivateKey(在用d2i_PrivateKey解压缩EVP_PKEY之后),它可以工作。我也从SSL_CTX_use_RSAPrivateKey_ASN1切换到SSL_CTX_use_PrivateKey,再次传入EVP_PEY,它可以工作。

其中一个openssl开发人员提出我的问题是因为“RSAPrivateKey的DER编码是PKCS8_PRIV_KEY_INFO的长OCTET STRING元素中包含的内容。你需要进行双重解码以获得实际值 RSAPrivateKey结构,无论是手工还是通过其他库函数。“我还没有测试过,但我想至少发布这个解决方案。