Message d’erreur
unable to load Public Key
Formulation d’OpenSSL 1.1.x, qui reste la forme la plus citée. OpenSSL 3.0 affiche « Could not read key of Public Key from cert.pem », OpenSSL 3.5 et les versions ultérieures « Could not find private key of Public Key from cert.pem » (reproduit sur 3.0.2 et 3.6.4) : même échec, nouvelle formulation.
Ce que cela signifie
La commande openssl a tenté de lire une clé publique dans le fichier indiqué et n’y a rien trouvé qu’elle reconnaisse comme telle. Le fichier existe ; c’est son contenu qui pose problème : un autre type d’objet (certificat, clé privée, clé SSH), un mauvais encodage, ou pas de clé du tout.
Pourquoi cela se produit
Le fichier est un certificat, pas une clé brute
fréquente« -----BEGIN CERTIFICATE----- » est un certificat X.509 qui contient une clé publique, mais n’en est pas une. Les commandes qui attendent une SPKI seule (-pubin) le refusent ; la clé doit d’abord être extraite.
Une clé OpenSSH là où du PEM est attendu
fréquenteLes entrées sur une seule ligne « ecdsa-sha2-nistp256 AAAA... user@host » (format authorized_keys) utilisent l’encodage propre à OpenSSH, pas PEM/DER. OpenSSL ne peut pas les lire sans conversion.
Clé privée passée avec -pubin
fréquenteL’option -pubin annonce que l’entrée est une clé publique. OpenSSL 1.1 et 3.0 refusent alors « -----BEGIN PRIVATE KEY----- » : retirez l’option ou dérivez d’abord la moitié publique. (OpenSSL 3.5 et les versions ultérieures lisent silencieusement la moitié publique à la place.)
Fichier DER lu comme du PEM
occasionnelleAvec OpenSSL 1.1, les fichiers binaires .der/.cer nécessitent -inform der : l’analyse PEM de données binaires ne trouve aucune ligne BEGIN et échoue. OpenSSL 3 détecte le DER de lui-même.
Comment corriger l’erreur
- 1.
Extraire la clé d’un certificat
Une seule commande produit le PEM de clé publique SPKI qu’attendent les commandes utilisant -pubin.
bash openssl x509 -in cert.pem -pubkey -noout > pubkey.pem openssl pkey -pubin -in pubkey.pem -noout -text # now loads - 2.
Convertir une clé OpenSSH en PEM
ssh-keygen exporte une entrée au format authorized_keys en PEM de clé publique standard BEGIN PUBLIC KEY (SPKI) ; ssh-keygen appelle ce format PKCS8.
bash ssh-keygen -f id_ecdsa.pub -e -m pkcs8 > pubkey.pem - 3.
Dériver la moitié publique d’une clé privée
Si le fichier est en réalité la clé privée, n’utilisez pas -pubin : dérivez la clé publique.
bash openssl pkey -in private.pem -pubout -out pubkey.pem