Estoy intentando generar un par de claves RSA 1024 (público / privado) usando el siguiente comando
openssl genrsa -des3 -out server.key 1024
En el archivo server.key, solo está el bloque privado RSA, ¿a dónde va la clave pública?
El formato de clave privada RSA incluye todos los elementos públicos. Cuando obtiene la clave privada, realmente tiene tanto la clave privada como la pública.
Esto se describe en PKCS # 1 (el estándar RSA líder); El formato de clave privada es una estructura ASN.1 codificada que contiene:
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
La clave pública realmente consiste en el módulo y exponente público , que están ambos en la estructura de la clave privada, como se muestra arriba.
Ahora su pregunta podría ser: "¿qué sucede si deseo que la clave pública esté 'sola'?"
OpenSSL vive en y por el mundo X.509. En X.509 , la clave pública no existe como valores independientes; y no hay un formato de archivo estándar para las claves públicas únicas. Se supone que una aplicación utiliza claves públicas que se encuentran en certificados . Esto es bastante evidente en el protocolo SSL / TLS (que es el objetivo principal de soporte de OpenSSL): cuando el cliente envía Clave pública, la envía como certificado. Por lo tanto, si desea que la clave pública en un archivo, haga que se almacene en un certificado (posiblemente autofirmado). El subcomando OpenSS req , con el indicador -x509
, puede ayudar.
Por supuesto, cada regla tiene excepciones, por lo que existe también un método para obtener la clave pública "solo" de la clave privada; esto es lo que @ uwotm8 muestra en su respuesta. Sin embargo, la clave pública resultante, que se verá así:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDzYY+BpIuKouSnoemSwHwC25uW
Xc0zX1gl8NtG5UQP2U4Lda0s5XbBJm4O2W+RkOgR1f1d5cGOXRPd6Q9ntw3MYQv6
ubsMRZUaOT4vCpykWfPi/VfsQEPlWHw2pulYAyumx/sw8tX5i9NC2e2bY4eWwo22
BELyXpNdoGozSje8PQIDAQAB
-----END PUBLIC KEY-----
no se puede usar realmente en ninguna parte, porque este es un formato no estándar.
(Técnicamente, este es un elemento SubjectPublicKeyInfo
tal como aparece en un certificado X.509, pero no se supone que aparezca fuera de un certificado X.509).
La clave pública debe derivarse de la clave privada. Prueba este comando:
openssl rsa -in server.key -pubout
Lea otras preguntas en las etiquetas openssl