2011-11-28 48 views
19

Me han proporcionado un archivo PEM con un certificado y claves públicas/privadas. Específicamente incluye los encabezadosConvertir clave privada tradicional PEM a clave privada PKCS8

-----BEGIN CERTIFICATE----- 
-----END CERTIFICATE----- 
-----BEGIN RSA PRIVATE KEY----- 
-----END RSA PRIVATE KEY----- 
-----BEGIN RSA PUBLIC KEY----- 
-----END RSA PUBLIC KEY----- 

en ese orden específico.

Mi comprensión es que sin un encabezado después del encabezado BEGIN RSA PRIVATE KEY que este archivo pem contiene una clave privada en el formato tradicional (PKCS1) sin cifrado.

Necesito convertir esta clave privada a un formato desencriptado PKCS8 con codificación DER para usar con el código del servidor de Java, específicamente PKCS8EncodedKeySpec. He intentado con OpenSSL, ambos con comandos rsa y pkcs8, pero sin suerte. No hay una necesidad específica de usar openssl si hay algo más fácil.

Específicamente:

openssl rsa -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem 
openssl rsa -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem -pubin openssl pkcs8 -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem -nocrypt 

También he intentado especificando el informar y outform sin éxito.

[email protected]:~/TestCerts$ openssl rsa -in IServer_Key.pem -out IServer_Key.pkcs8.pem -pubin 
unable to load Public Key 
5925:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650: 
Expecting: PUBLIC KEY 

[email protected]:~/TestCerts$ openssl rsa -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem 
unable to load Private Key 
5993:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1316: 
5993:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:828: 
5993:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:748:Field=n, Type=RSA 
5993:error:0D09A00D:asn1 encoding routines:d2i_PrivateKey:ASN1 lib:d2i_pr.c:99: 
5993:error:0907B00D:PEM routines:PEM_READ_BIO_PRIVATEKEY:ASN1 lib:pem_pkey.c:125: 

[email protected]:~/TestCerts$ openssl pkcs8 -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem -nocrypt 
Error decrypting key 
6022:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650: 
Expecting: PRIVATE KEY 

Cualquier ayuda sería muy apreciada en este momento.

+0

Eliminé la etiqueta de Java porque no está restringida a java y espero que tenga una audiencia más amplia – cfi

+0

Creo que la mayoría de los comandos de OpenSSL esperan un solo objeto por archivo (algunos renuncian a la mano). Cree un segundo archivo y solo agréguele la clave privada (incluyendo la TECLA PRIVADA '----- BEGIN RSA -----' y '----- END RSA PRIVATE KEY -----') . Luego prueba tus comandos. – jww

+0

[Openssl pkcs8 formato predeterminado le da a RSA PRIVATE KEY] (https://superuser.com/questions/606215/openssl-pkcs8-default-format-gives-rsa-private-key). – jww

Respuesta

43

Intenta usar el siguiente comando. No lo he intentado, pero creo que debería funcionar.

openssl pkcs8 -topk8 -inform PEM -outform DER -in filename -out filename -nocrypt 
+6

Esto me da: error descifrado de claves 140139164128912: Error: 0906D06C: rutinas PEM: PEM_read_bio: ninguna línea de salida: pem_lib.c: 701: Esperar: CLAVE PRIVADA –

11

Convertir la clave privada del PKCS # 1 a PKCS # 8 con openssl:

# openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in pkcs1.key -out pkcs8.key 

que funcionará siempre y cuando tenga el PKCS tecla # 1 en PEM (formato de texto) como descrito en la pregunta.

+3

Así que esto es sólo duplicado de la respuesta de Nilesh? –

Cuestiones relacionadas