Converti la chiave privata tradizionale PEM in chiave privata PKCS8

Mi è stato dato un file PEM con un certificato e chiavi pub / private. In particolare include le intestazioni

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

in questo specifico ordine.

La mia comprensione è senza intestazione che segue l’intestazione BEGIN RSA PRIVATE KEY che questo file pem contiene una chiave privata nel formato tradizionale (PKCS1) senza crittografia.

Ho bisogno di convertire questa chiave privata in un formato codificato in PKCS8 con codifica DER da utilizzare con il codice del server java, in particolare PKCS8EncodedKeySpec. Ho provato OpenSSL, entrambi con comandi rsa e pkcs8, ma senza fortuna. Non c’è alcuna necessità specifica di usare openssl se c’è qualcosa di più semplice.

In particolare:

 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 

Ho anche provato a specificare l’informazione e la forma senza successo.

 [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 

Qualsiasi aiuto sarebbe molto apprezzato a questo punto.

Prova a usare il seguente comando. Non l’ho provato, ma penso che dovrebbe funzionare.

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

Per convertire la chiave privata da PKCS # 1 a PKCS # 8 con openssl:

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

Funzionerà finché avrai la chiave PKCS # 1 in PEM (formato testo) come descritto nella domanda.