Zum Inhalt springen
ecdsa.com
Python cryptographyPython cryptography

Fehlermeldung

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

Was der Fehler bedeutet

Die Datei ist wohlgeformtes PEM – der Rahmen lässt sich parsen –, aber ihr Label ist nicht PUBLIC KEY. Du hast load_pem_public_key einen privaten Schlüssel, ein Zertifikat oder einen CSR übergeben. Die Bibliothek fragt wörtlich, ob du die richtige Ladefunktion für dieses Objekt gewählt hast.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Öffentlichen Schlüssel aus dem ableiten, was du tatsächlich hast

    Aus jedem Container mit Schlüsselmaterial lässt sich der öffentliche Schlüssel mit einem zusätzlichen Aufruf gewinnen.

    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.

    Einmal ein sauberes SPKI exportieren

    Braucht ein System den nackten öffentlichen Schlüssel immer wieder, erzeuge die kanonische Datei mit BEGIN PUBLIC KEY und speichere sie.

    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.

    Dateien nach ihrem Inhalt benennen

    Die Hälfte dieser Fehler sind Ablagefehler, keine Codefehler: eine server.pem, in der Schlüssel, Zertifikat und Kette aneinandergehängt sind, oder eine public.pem, die durch Kopieren der Ausgabe des falschen Befehls entstanden ist. Speichere ein Objekt pro Datei mit dem Objekttyp im Namen (orders-es256-public.pem), und die gesamte Fehlerklasse „falsche Ladefunktion“ verschwindet aus der Codebasis.

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen