为什么我无法使用PEM_read_RSAPublicKey读取openssl生成的RSA pub密钥?

我正在尝试读取使用openssl生成的RSA公钥,如下所示:

Private Key: openssl genrsa -out mykey.pem 1024 Public Key afterwards: openssl rsa -in mykey.pem -pubout > somewhere.pub 

然后我试着读:

 FILE *keyfile = fopen("somewhere.pub", "r"); RSA *rsa_pub = PEM_read_RSAPublicKey(keyfile, NULL, NULL, NULL); //rsa_pub == NULL! 

当我正在阅读私钥时,它可以工作

 FILE *keyfile = fopen("mykey.pem", "r"); RSA *rsa_pri = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL); //all good 

有任何想法吗?

我已经读过openssl生成RSA公钥的X509密钥。 但我甚至无法加载X509发布密钥。

谢谢

您可以尝试使用PEM_read_RSA_PUBKEY()而不是PEM_read_RSAPublicKey()

这都是关于格式的。

openssl生成的默认公钥文件格式是PEM格式。

PEM_read_RSA_PUBKEY()读取PEM格式。 PEM_read_RSAPublicKey()读取PKCS#1格式。

因此,如果您想坚持PEM_read_RSAPublicKey()您可以通过在生成公钥时指定-outform DER选项,使用PKCS#1格式生成公钥文件。

openssl rsa实用程序使用函数PEM_write_bio_RSA_PUBKEY而不是PEM_write_bio_RSAPubicKey来保存公钥。 因此,如果您希望程序与其输出兼容,则应使用PEM_write_bio_RSA_PUBKEY和PEM_read_bio_RSA_PUBKEY来保存/加载公钥文件。

http://openssl.6102.n7.nabble.com/RSA-public-private-keys-only-work-when-created-programatically-td12532.html