Aller au contenu
ecdsa.com
Python cryptographycryptography (Python)

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

Comment corriger l’erreur

  1. 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. 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. 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.

Erreurs associées

Parcourir toute la base de données des erreurs de signature