una - ¿Por qué no puedo leer la clave de publicación RSA generada por openssl con PEM_read_RSAPublicKey?
generar.pem openssl (3)
La utilidad openssl rsa guarda la clave pública mediante la función PEM_write_bio_RSA_PUBKEY y no PEM_write_bio_RSAPubicKey. Por lo tanto, si desea que su programa sea compatible con su salida, entonces debe usar PEM_write_bio_RSA_PUBKEY y PEM_read_bio_RSA_PUBKEY para guardar / cargar archivos de clave pública.
Estoy tratando de leer una clave pública RSA generada con openssl como este:
Private Key:
openssl genrsa -out mykey.pem 1024
Public Key afterwards:
openssl rsa -in mykey.pem -pubout > somewhere.pub
Entonces trato de leer:
FILE *keyfile = fopen("somewhere.pub", "r");
RSA *rsa_pub = PEM_read_RSAPublicKey(keyfile, NULL, NULL, NULL);
//rsa_pub == NULL!
Cuando estoy leyendo la clave privada funciona
FILE *keyfile = fopen("mykey.pem", "r");
RSA *rsa_pri = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL);
//all good
¿Algunas ideas?
He leído que openssl genera una clave X509 de la clave pública RSA. Pero no pude cargar ni siquiera una clave de pub X509.
Gracias
Parece que hay dos formatos de clave pública rsa, con codificación diferente.
A. RSA_PUBKEY
RSA* rsaPubKey = PEM_read_bio_RSA_PUBKEY( bio, NULL, 0, pass ) ;
leer PUBKEY
con este formato
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
generado por
openssl rsa -in key.pri -pubout -out key.pub1
B. RSAPublicKey
RSA* rsaPubKey = PEM_read_bio_RSAPublicKey( bio, NULL, 0, pass ) ;
lee PublicKey
con este formato
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
generado por
openssl rsa -in key.pri -RSAPublicKey_out -out key.pub2
convertir formato A a B
openssl rsa -in key.pub1 -pubin -pubout -out key.pub2
Puede probar PEM_read_RSA_PUBKEY()
lugar de PEM_read_RSAPublicKey()
.
Esto es todo acerca de los formatos.
El formato de archivo de clave pública predeterminado generado por openssl es el formato PEM.
PEM_read_RSA_PUBKEY()
lee el formato PEM. PEM_read_RSAPublicKey()
lee el formato PKCS # 1.
Por lo tanto, si desea mantener PEM_read_RSAPublicKey()
, podría generar el archivo de clave pública utilizando el formato PKCS # 1 especificando la opción -outform DER
al generar la clave pública.