Convierta clave privada tradicional PEM a clave privada PKCS8

Me dieron un archivo PEM con un certificado y claves públicas / privadas. Específicamente incluye los encabezados

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

Según tengo entendido, sin un encabezado siguiendo el encabezado BEGIN RSA PRIVATE KEY que este archivo pem contiene una clave privada en el formato tradicional (PKCS1) sin encriptación.

Necesito convertir esta clave privada a un formato desencriptado PKCS8 con encoding DER para su uso 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 intenté especificar el informe y la versión sin éxito.

 user@ubuntu:~/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 user@ubuntu:~/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: user@ubuntu:~/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 punto.

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 

Para convertir la clave privada de PKCS # 1 a PKCS # 8 con openssl:

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

Eso funcionará siempre que tenga la clave PKCS # 1 en PEM (formato de texto) como se describe en la pregunta.