openssl - generando par de claves rsa - clave pública

4

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?

    
pregunta Jake 22.06.2014 - 14:25
fuente

2 respuestas

8

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).

    
respondido por el Thomas Pornin 22.06.2014 - 19:20
fuente
3

La clave pública debe derivarse de la clave privada. Prueba este comando:

openssl rsa -in server.key -pubout
    
respondido por el user47604 22.06.2014 - 19:14
fuente

Lea otras preguntas en las etiquetas