Saltar al contenido
ecdsa.com
Python cryptographycryptography de Python

Mensaje de error

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

Qué significa

El archivo es un PEM bien formado —la delimitación se analiza sin problemas—, pero su etiqueta no es PUBLIC KEY. Se pasó a load_pem_public_key una clave privada, un certificado o una CSR. La biblioteca te pregunta, literalmente, si este es el cargador correcto para este objeto.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Derivar la clave pública de lo que realmente tienes

    Cualquier contenedor con material de clave puede proporcionar la clave pública con una llamada adicional.

    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.

    Exportar una sola vez un SPKI correcto

    Si un sistema necesita la clave pública sin envolver una y otra vez, genera el archivo canónico BEGIN PUBLIC KEY y guarda ese.

    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.

    Nombrar los archivos según lo que contienen

    La mitad de estos fallos son errores de organización de archivos, no errores de código: un server.pem con la clave, el certificado y la cadena concatenados, o un public.pem creado al copiar la salida del comando equivocado. Guarda un objeto por archivo, con el tipo de objeto en el nombre (orders-es256-public.pem), y toda esta clase de discrepancias de cargador desaparece del código base.

Errores relacionados

Explorar toda la base de datos de errores de firma