Message d’erreur
Valid PEM but no BEGIN PUBLIC KEY/END PUBLIC KEY delimiters. Are you sure this is a public key?
Python cryptography — ValueError from load_pem_public_key
Ce que cela signifie
Le fichier est un PEM bien formé (son encadrement est analysé sans erreur), mais son libellé n’est pas PUBLIC KEY. Vous avez passé à load_pem_public_key une clé privée, un certificat ou une CSR. La bibliothèque vous demande, littéralement, si vous avez choisi le bon chargeur pour cet objet.
Pourquoi cela se produit
Clé privée passée au chargeur de clés publiques
fréquenteLes blocs BEGIN PRIVATE KEY / BEGIN EC PRIVATE KEY nécessitent load_pem_private_key. Cela arrive souvent quand un même emplacement de configuration (« la clé ») alimente des chemins de code qui ont en réalité besoin de moitiés différentes de la paire.
Un certificat là où la clé seule est attendue
fréquenteBEGIN CERTIFICATE contient une clé publique à l’intérieur d’une structure X.509. Il faut d’abord le charger comme certificat, puis en extraire la clé : le libellé PEM vous indique quel analyseur traite cet objet.
Libellés inhabituels mais valides
rareDes objets comme BEGIN CERTIFICATE REQUEST (CSR) ou une clé au format OpenSSH collée dans un fichier .pem échouent aussi à cette vérification : chacun a son propre chargeur ou doit être converti.
Comment corriger l’erreur
- 1.
Dériver la clé publique de ce que vous avez réellement
Tout conteneur qui renferme du matériel de clé peut fournir la clé publique moyennant un appel supplémentaire.
python from cryptography.hazmat.primitives.serialization import ( load_pem_private_key, load_pem_public_key) from cryptography.x509 import load_pem_x509_certificate first = pem.splitlines()[0] if b"PRIVATE KEY" in first: public_key = load_pem_private_key(pem, password=None).public_key() elif b"CERTIFICATE" in first: public_key = load_pem_x509_certificate(pem).public_key() else: public_key = load_pem_public_key(pem) - 2.
Exporter une fois pour toutes une SPKI correcte
Si un système a régulièrement besoin de la clé publique seule, générez le fichier canonique BEGIN PUBLIC KEY et conservez-le.
bash openssl pkey -in private.pem -pubout -out public.pem # from a private key openssl x509 -in cert.pem -pubkey -noout > public.pem # from a certificate - 3.
Nommer les fichiers d’après leur contenu
La moitié de ces échecs sont des erreurs de rangement plutôt que des erreurs de code : un server.pem contenant la clé, le certificat et la chaîne concaténés, ou un public.pem produit en copiant la sortie de la mauvaise commande. Stockez un objet par fichier, avec le type d’objet dans le nom (orders-es256-public.pem), et toute cette catégorie d’erreurs dues à un chargeur inadapté disparaît de la base de code.