我有一个使用openssl的d2i_RSAPrivateKey函数解析私有RSA密钥的函数。我发现这对于某些密钥是成功的,但对于其他密钥则不成功,即使所有这些密钥都是PEM编码的RSA密钥。我生成了自己的签名公钥和私钥,如下所示:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 36500 -nodes -outform PEM
我将key.pem和cert.pem合并到一个文件combined.pem中,并验证了我可以使用openssl的x509和rsa命令解析该文件:
openssl x509 -inform PEM -modulus -in combined.pem
Modulus=B59A...
openssl rsa -inform PEM -modulus -in combined.pem
Modulus=B59A...
但是d2i_RSAPrivateKey默默地无法以代码形式解析该文件,返回错误代码而不打印任何内容。我知道我正确地使用了d2i_RSAPrivateKey,因为它可以在不同的公共/私有证书文件上工作。有人能告诉我为什么它不能在命令行上解析我在这里创建的文件吗?
发布于 2015-10-13 17:53:11
在与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的长二进制字符串元素中,您需要手动或通过其他库函数进行双重解码才能获得实际的RSAPrivateKey结构。”我还没有测试过,但我至少想发布这个变通的解决方案。
https://stackoverflow.com/questions/33001775
复制相似问题