为什么我无法使用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来保存/加载公钥文件。