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
Privater Schlüssel an die Ladefunktion für öffentliche Schlüssel übergeben
häufigBlöcke mit BEGIN PRIVATE KEY / BEGIN EC PRIVATE KEY brauchen load_pem_private_key. Das passiert oft, wenn ein einziger Konfigurationseintrag („der Schlüssel“) Codepfade bedient, die eigentlich unterschiedliche Hälften des Schlüsselpaars brauchen.
Zertifikat, wo der nackte Schlüssel erwartet wird
häufigBEGIN CERTIFICATE enthält einen öffentlichen Schlüssel innerhalb einer X.509-Struktur. Das Objekt muss zuerst als Zertifikat geladen werden, danach wird der Schlüssel extrahiert – das PEM-Label sagt dir, welcher Parser für das Objekt zuständig ist.
Exotische, aber gültige Labels
seltenObjekte wie BEGIN CERTIFICATE REQUEST (CSR) oder ein Schlüssel im OpenSSH-Format, der in eine .pem-Datei eingefügt wurde, scheitern ebenfalls an dieser Prüfung – jedes hat seine eigene Ladefunktion oder muss konvertiert werden.
So behebst du den Fehler
- 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.
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.
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.