Impossible de charger la clé privée. (Routines PEM: PEM_read_bio: pas de ligne de départ: pem_lib.c: 648: En attente: TOUTE CLÉ PRIVÉE)

92

J'ai un fichier .key qui est un fichier de clé privée au format PEM. Je n'ai pas fait ce fichier mais je l'ai obtenu de quelque part.

Je voulais voir son hachage MD5 avec l'outil openssl comme la commande ci-dessous.

openssl rsa -in server.key -modulus -noout

Mais cela génère une erreur ci-dessous.

unable to load Private Key
13440:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:648:Expecting: ANY PRIVATE KEY

Voici une analyse du fichier .key.

openssl asn1parse -in server.key
0:d=0  hl=4 l= 603 cons: SEQUENCE
4:d=1  hl=2 l=   1 prim: INTEGER           :00
7:d=1  hl=3 l= 129 prim: INTEGER           :C141201603899993919CBAA56985E9C7
C6A2AF713A02F5FE88D38CEFBED9304599689280B84B0AB577A9719CA20DDA1246A894AF397A2C57
EE5A582B036CC367E3667454DCD82DBDBF187C35FE39F61C71B517DDDF576F5471B4EC2E045E0F9D
619F5616C4E832F00CBD0DBF41B4BA3CBC4B4B603AE1FE61965917DA732E0DEF
139:d=1  hl=2 l=   3 prim: INTEGER           :010001
144:d=1  hl=3 l= 128 prim: INTEGER           :1687B9AE67562CEDEBDD7A531B84CDB7
093CE138519B93C34B7F626076FF0A262B16EA71904ACB6251A39307C04ADE202055BA13DD9F1539
6123EE408183361A9BC08B9413FA360EA928E48CC3F52B33ACF2980758F02BA2139F652F30A257C2
2E45D7C25835FC4D22B9ECECC12AB632318D4F47E1EBDAD9781B96BCFF03A2D1

 ...

Y a-t-il autre chose que je puisse essayer?

tkpl
la source
2
Quel est l'en-tête / pied de page exact du fichier PEM? Vous pouvez obtenir cette erreur si vous envoyez une clé publique. En outre, la commande que vous avez répertoriée ne donnera pas le hachage MD5. Cela donnera le module de la clé.
gtrig
J'avais l'habitude scpde copier le fichier de Windows vers Ubuntu. Pour résoudre ce problème, j'ai supprimé le fichier sur Ubuntu, créé un nouveau fichier vide à cet endroit, puis utilisé vimpuis collé dans le contenu correct.
Ryan

Réponses:

64

Ouvrez le fichier de clé dans Notepad ++ et vérifiez le codage. S'il indique UTF-8-BOM, changez-le en UTF-8. Enregistrez le fichier et réessayez.

Robert L.
la source
2
Et si j'utilise un Mac?
Ernest Zamelczyk
6
Utilisez Visual Studio Code - vous pouvez facilement modifier l'encodage à l'aide de la barre d'outils inférieure!
Luca Ghersi le
2
Oh mon bon Dieu! MERCI! Je n'aurais jamais compris cela par essais et erreurs, résolu le problème pour moi!
Mikael Dyreborg Hansen le
C'était tout pour moi. Merci!
Freeman Helmuth
3
GoDaddy produit des clés privées "generated-private-key.txt" préfixées par une nomenclature, ce qui provoque ce problème. Au moins sur un Mac, le vidage du texte clé avec cat n'affichait pas la nomenclature, mais le regarder avec moins le faisait. J'ai utilisé BBEdit pour supprimer la nomenclature, mais tout ce qui peut changer le format ou couper les quatre premiers octets fonctionnera.
Seth Noble
55

J'ai changé l'en-tête et le pied de page du fichier PEM en

-----BEGIN RSA PRIVATE KEY-----

et

-----END RSA PRIVATE KEY-----

Enfin, ça marche!

tkpl
la source
1
Vous pouvez également ajouter -inform pemà la commande pour obtenir le même résultat. Par ex openssl rsa -in server.key -modulus -noout -inform pem.
Simon Woodside
1
Vérifiez stackoverflow.com/questions/54994641/… si cela résout votre problème
qstack
Quelque chose fonctionne déjà correctement avec le "mauvais" format (c'est-à-dire les en-têtes inchangés), donc, c'est une solution improvisée, vouée à casser quelque chose qui fonctionnait déjà bien, comme un proxy inverse qui ne plante pas faute de ceux-ci manuellement en-têtes et pieds de page modifiés. Yipes!
alejandrob
32

votre fichier .key contient des caractères non autorisés. vous pouvez vérifier le fichier .key comme ceci:

# file server.key

La sortie "server.key: UTF-8 Unicode (avec BOM) text" signifie qu'il s'agit d'un texte brut et non d'un fichier de clé. La sortie correcte doit être "server.key: clé privée PEM RSA".

utilisez la commande ci-dessous pour supprimer les caractères illégaux:

# tail -c +4 server.key > new_server.key

Le new_server.key doit être correct.

Pour plus de détails, vous pouvez cliquer ici , merci pour le message.

张 俊
la source
1
file server.keycette commande m'a aidé à obtenir le problème. Merci.
itsHarshad
La commande tail semble avoir ajouté des caractères de formatage étranges à mon fichier clé. Je ne sais pas pourquoi cela serait.
ryanwebjackson
Ceci, en combinaison avec la réponse @tkpl, semble avoir éliminé les erreurs pour moi.
ryanwebjackson
Cela m'a sauvé quelques heures et beaucoup de cheveux.
Felipe Gusmao
6
> I have a .key file which is PEM formatted private key file.
> ...
> Here's some asn1parse of the .key file...

Le fait qu'il semble correct asn1parseme laisse croire que ce n'est pas encodé en PEM.


Y a-t-il autre chose que je puisse essayer?

Comme il semble être ASN.1, essayez:

$ openssl rsa -in server.key -inform DER -modulus -noout

Notez le -inform DERpour basculer entre les encodages.

jww
la source
6

Créer un certificat CA

openssl genrsa -out privateKey.pem 4096
openssl req -new -x509 -nodes -days 3600 -key privateKey.pem -out caKey.pem
Pravind Kumar
la source
5

Supprimez tous les espaces au début du fichier .key.

johnnycardy
la source
5

Résolution de mon côté. Changer le codage en UTF8 sans nomenclature

Kosmo Para
la source
2

Je suis sous Windows 10 et j'ai enregistré ma clé avec Windows1252 codage et cela a fonctionné pour moi. Sur une autre question StackOverflow, certaines personnes corrigeaient ce problème avec UTF-8 avec BOM .

En d'autres termes, il peut s'agir du codage du fichier.

Rafael ZB Bravo
la source
1

Peut-être que la clé privée elle-même n'est pas présente dans le fichier. J'ai également été confronté au même problème mais le problème est qu'il n'y a pas de clé privée présente dans le fichier.

Dhruvil Shah
la source
1

cela peut se produire si vous essayez d'utiliser votre clé publique pour créer un certificat au lieu de votre clé privée. vous devriez utiliser la clé privée

aris
la source
0

J'ai eu le même problème aujourd'hui et j'ai remarqué que cela se produit lorsque le propriétaire / groupe de fichiers n'est pas celui qui exécute l'application qui lit la clé. C'est peut-être aussi votre problème.

Ionut Stoica
la source
0

Aucune des autres réponses ne semblait correcte dans mon cas, mais j'ai trouvé la vraie réponse ici

Mon id_rsafichier était déjà au format PEM, j'avais juste besoin d'ajouter l' .pemextension au nom du fichier.

Grâce à

Les options possibles du openssl rsa -informparamètre sont l'une des suivantes:PEM DER

Un PEMfichier encodé est un encodage de texte brut qui ressemble à quelque chose comme:

-----BEGIN RSA PRIVATE KEY-----
MIGrAgEAAiEA0tlSKz5Iauj6ud3helAf5GguXeLUeFFTgHrpC3b2O20CAwEAAQIh
ALeEtAIzebCkC+bO+rwNFVORb0bA9xN2n5dyTw/Ba285AhEA9FFDtx4VAxMVB2GU
QfJ/2wIRANzuXKda/nRXIyRw1ArE2FcCECYhGKRXeYgFTl7ch7rTEckCEQDTMShw
8pL7M7DsTM7l3HXRAhAhIMYKQawc+Y7MNE4kQWYe
-----END RSA PRIVATE KEY-----

While DERest un format d'encodage binaire.

gregn3
la source
0

Dans notre cas, ce qui a causé le problème est que la clé privée que nous essayions d'utiliser a été chiffrée avec une phrase de passe.

Nous avons dû décrypter la clé privée en utilisant ssh-keygen -p avant de pouvoir utiliser la clé privée avec l'outil de ligne de commande openssl.

Paul Dejean
la source
-6

Pourquoi ne pas utiliser le bot de certificat

yum installer epel-release

miam installer certbot-nginx

Obtention d'un certificat

certbot --nginx -d exemple.com -d www.example.com

Dylan B
la source