web-dev-qa-db-fra.com

Convertir la clé privée traditionnelle PEM en clé privée PKCS8

J'ai reçu un fichier PEM avec un certificat et des clés pub/privées. Plus précisément, il comprend les en-têtes

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

dans cet ordre précis.

Ma compréhension est sans en-tête suivant le BEGIN RSA PRIVATE KEY en-tête que ce fichier pem contient une clé privée au format traditionnel (PKCS1) sans chiffrement.

J'ai besoin de convertir cette clé privée en un format non crypté PKCS8 encodé DER pour une utilisation avec Java code serveur, en particulier PKCS8EncodedKeySpec. J'ai essayé OpenSSL, à la fois avec les commandes rsa et pkcs8, mais sans chance Il n'y a aucun besoin spécifique d'utiliser openssl s'il y a quelque chose de plus simple.

Plus précisément:

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

J'ai également essayé de spécifier les informations et les résultats sans succès.

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

Toute aide serait très appréciée à ce stade.

36
Peter Oehlert

Essayez d'utiliser la commande suivante. Je ne l'ai pas essayé mais je pense que ça devrait marcher.

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

Pour convertir la clé privée de PKCS # 1 à PKCS # 8 avec openssl:

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

Cela fonctionnera tant que vous aurez la clé PKCS # 1 en PEM (format texte) comme décrit dans la question.

28
Sergiu Marsavela