Entwicklertools · Base64-Encoder und -Decoder
PEM erklärt: Warum Zertifikate und Schlüssel zwischen BEGIN und END Base64 sind
· Hintergrund
base64 Kodierung
Eine PEM-Datei ist eine DER-Binärdatei, die in Base64 mit beschrifteten Rüstungslinien verpackt ist. In diesem Beitrag werden die Ursprünge des Formats, seine Zeilenregeln und was Sie durch die Dekodierung lernen können und was nicht, erläutert.
Das Zertifikat, das „wie Text aussieht“, aber nicht analysiert werden kann – ein Tippfehler im Header, ein verirrter Wagenrücklauf und das Format darunter
Eine PEM-Datei ist eine Base64-codierte Binärdatei, die in Textbeschriftungen eingeschlossen ist. Der Name stammt von Privacy-Enhanced Mail (RFC 1421, 1992), das dieses Format für verschlüsselte Nachrichten verwendete. Das Format existiert heute noch in TLS-Zertifikaten, SSH-Schlüsseln und GPG-Schlüsseln. Die Struktur ist einfach: eine Zeile mit der Aufschrift -----BEGIN CERTIFICATE----- (oder BEGIN PRIVATE KEY, BEGIN PUBLIC KEY usw.), gefolgt von 64-Zeichenzeilen mit Base64-Text, gefolgt von -----END CERTIFICATE-----.
Der Base64-Körper dekodiert in ein Binärformat namens DER (Distinguished Encoding Rules), das eine Möglichkeit zur Serialisierung strukturierter Daten (insbesondere ASN.1-Strukturen) darstellt. Durch die Dekodierung von Base64 erhalten Sie eine Binärdatei; Das Lesen der Binärdatei erfordert das Verständnis von ASN.1, was komplex ist. Der PEM-Schutz existiert, weil Binärdateien schwierig per E-Mail zu versenden und zu bearbeiten sind. Eine Zertifikatsdatei in reiner Binärform würde beschädigt, wenn sie über alte Mailsysteme, USENET oder Webformulare weitergeleitet würde.
Die in einem PEM-Block sichtbare Textpanzerung – Beschriftungen um einen Base64-Körper
Durch die Base64-Codierung der Binärdatei und das Einschließen in Textbeschriftungen wird das gesamte Zertifikat zu 7-Bit-ASCII-Text, der jeden Transport übersteht. Ein Texteditor kann es öffnen; Ein Mailsystem wird es nicht beschädigen. Die Zeilen -----BEGIN und -----END sind Beschriftungen für Menschen und automatisierte Werkzeuge; Sie kennzeichnen deutlich, welche Art von Daten sich darin befinden. Ein Zertifikat trägt die Bezeichnung CERTIFICATE; Ein privater Schlüssel trägt die Bezeichnung PRIVATE KEY.
Das Etikett wird nicht durch kryptografische Software überprüft; es ist nur ein Hinweis für Menschen und Werkzeuge. Die 64-Zeichenzeilenbeschränkung in PEM stammt aus RFC 1421 und der gleichen MIME-Argumentation wie E-Mail-Base64: Alte Mailsysteme hatten Zeilenlängenbeschränkungen und 64 Zeichen passen auf ein Terminal aus den 1980er Jahren. PEM umschließt die Base64-Ausgabe bei 64 Zeichen mit einem Zeilenende (CR LF unter Windows, LF unter Unix).
Von beschriftetem Text bis hin zu dekodierten Bytes – dieses Repository erstellt keinen Formatverlauf
Beim Dekodieren eines PEM-Zertifikats muss der Parser die Schutzzeilen (-----BEGIN..., -----END...) und die Zeilenumbrüche entfernen und dann den Rest mit Base64 dekodieren. Ein fehlerhafter Wagenrücklauf oder eine nicht übereinstimmende Bezeichnung können die Analyse unterbrechen. Der Zeilenumbruch ist nicht Teil des Base64-Standards (RFC 4648 base64 ist nicht umbrochen); es ist spezifisch für PEM. Im Inneren von Base64 befindet sich eine DER-codierte Binärdatei. DER ist ASN.1 (Abstract Syntax Notation), eine komplexe Spezifikation zur Darstellung von Datenstrukturen.
Ein Zertifikat ist ein strukturierter Datensatz, der einen Antragstellernamen, einen öffentlichen Schlüssel, eine Signatur und Metadaten enthält. ASN.1 beschreibt die Bytes nicht direkt; Es beschreibt, wie die Struktur codiert werden soll.
Anatomie des Blocks als Eingabe für dieses Tool – Beschriftungen entfernen und nur den Base64-Körper übergeben
Die Kodierung beginnt mit Tag-Länge-Wert-Triplets. Beispielsweise wird eine SEQUENCE in ASN.1 als Tag 0x30 codiert, gefolgt von der Länge des Inhalts, gefolgt vom Inhalt selbst. Ein Zertifikat beginnt immer mit den Bytes 0x30 0x82 (Sequenz, Länge kodiert in zwei Bytes), die in Base64 als MII erscheinen.
Ein Zertifikat prüfen, ohne es zu analysieren: Die ersten drei Zeichen eines PEM-Zertifikatskörpers sind fast immer MII (das ist 0x30 0x82 in Base64, der Beginn einer SEQUENCE). Wenn ein PEM-Block nicht in 0x30 dekodiert, ist Base64 beschädigt oder die Bezeichnung ist falsch. Das Base64-Encoder- und Decoder-Tool kann den Körper dekodieren und Ihnen das Hex anzeigen: Fügen Sie die Base64-Zeilen ein (ohne die -----BEGIN- und END-Rüstung), entfernen Sie Zeilenumbrüche und dekodieren Sie.
Was durch die Dekodierung offengelegt wird: Binärbytes, nicht analysierte Zertifikatsfelder
Wenn die Ausgabe binär ist und mit 30 82 beginnt, handelt es sich wahrscheinlich um eine gültige Zertifikatsstruktur. Handelt es sich um Kauderwelsch oder Text, ist die Dekodierung fehlgeschlagen oder Base64 ist falsch. Häufige PEM-Fehler: eine nicht übereinstimmende Bezeichnung (z. B. ein Zertifikatshauptteil mit einer Bezeichnung PRIVATE KEY), ein Windows-Zeilenendeproblem (einige Parser ersticken bei CRLF), ein Tippfehler in der Rüstungszeile (zusätzliche Leerzeichen oder Zeichen) oder fehlende Zeilenumbrüche.
Tools erwarten -----BEGIN CERTIFICATE----- nicht -----BEGIN CERT----- oder BEGIN CERTIFICATE. Durch das Kopieren und Einfügen einer PEM aus einem Webbrowser oder einem PDF können Unicode-Anführungszeichen oder intelligente Anführungszeichen anstelle von ASCII-Anführungszeichen eingeführt werden, wodurch die Bezeichnung beschädigt wird. Das Einfügen eines privaten Schlüssels in ein Zertifikatsfeld ist ein häufiger Fehler; Der Parser lehnt es ab, da die Bezeichnung nicht übereinstimmt. PEM unterstützt mehrere Blöcke in einer Datei.
Arbeitsbeispiel: Einen kurzen Text dekodieren und Bytes überprüfen, ohne eine Zertifikatssignatur zu bestätigen
Eine SSH-Schlüsseldatei kann sowohl einen privaten Schlüssel (mit der Bezeichnung PRIVATE KEY) als auch einen öffentlichen Schlüssel (mit der Bezeichnung PUBLIC KEY) oder mehrere Zertifikatblöcke enthalten. Ein Parser liest die Datei von oben und sucht nach Zeilen, die mit -----BEGIN beginnen. Wenn es einen findet, liest es bis -----END mit passendem Label, extrahiert und base64-dekodiert den Text und verarbeitet ihn. Dann wird weiter nach dem nächsten Block gesucht.
Eine versehentlich verkettete Zertifikatskette (mehrere PEM-Blöcke für ein Zertifikat und seine Zwischenprodukte) in einer Datei ist gültig, wenn alle Bezeichnungen korrekt sind. Das PEM-Format wurde Anfang der 1990er Jahre für Privacy-Enhanced Mail (RFC 1421) standardisiert.
Was dies nicht abdeckt – das Parsen von ASN.1-Strukturen, die Verschlüsselung privater Schlüssel und PKCS#12-Bundles
RFC 7468 (2015) hat die Definition modernisiert und die Zeilenlängenregeln, das Panzerlinienformat und Randfälle klargestellt. Die meisten Tools und Standards verweisen mittlerweile auf RFC 7468. Es gibt noch andere Binär-zu-Text-Formate (z. B. DER-zu-Hex für einige Protokolle), aber PEM mit Base64- und ASCII-Kennzeichnungen ist der De-facto-Standard für Kryptografie und TLS, da es für Menschen lesbar ist, Klartext und einfach zu kopieren oder zu senden ist.
Erstellen eines PEM-Blocks: Nehmen Sie die DER-Binärdatei (z. B. ein Zertifikat aus einer kryptografischen Bibliothek), codieren Sie sie in Base64, umschließen Sie das Ergebnis mit 64 Zeichen mit Zeilenumbrüchen und umgeben Sie es mit den Zeilen -----BEGIN CERTIFICATE----- und -----END CERTIFICATE-----. Analysieren eines PEM-Blocks: Suchen Sie die Zeilen -----BEGIN und -----END, extrahieren Sie den Base64-Körper (Entfernen der Panzerung und Zeilenumbrüche), base64-Dekodierung, um die Binärdatei zu erhalten, und analysieren Sie dann die Binärdatei DER und ASN.1.
Fazit: PEM ist Base64 mit Beschriftungen – wie der Base64-Encoder und -Decoder Ihnen einen lokalen Ort bietet, an dem Sie den Base64-Körper eines Blocks vollständig im Browser ausprobieren können
Die meisten Tools automatisieren dies; Sie erstellen PEM selten von Hand. Das Verständnis der Struktur ist jedoch hilfreich, wenn Sie einen Parsing-Fehler beheben oder ein Zertifikat manuell überprüfen möchten. Ein PEM-Zertifikat sieht aus wie Text, der Inhalt besteht jedoch aus Binärdaten. Wenn Sie die Anfangs- und Endbezeichnungen lesen, erfahren Sie nicht, was das Zertifikat enthält. Sie müssen die Base64-Datei dekodieren und die ASN.1 analysieren, um den Betreffnamen, den öffentlichen Schlüssel, den Aussteller und das Ablaufdatum anzuzeigen.
Das Base64-Encoder- und Decoder-Tool kann den Text dekodieren, sodass Sie die ersten paar Bytes überprüfen können. Für das vollständige Parsen benötigen Sie einen ASN.1-Parser (die meisten Programmiersprachen verfügen über Bibliotheken dafür). Die wichtigste Erkenntnis ist, dass PEM ein Containerformat ist: Es enthält alle DER-codierten Daten, nicht nur Zertifikate. Die Bezeichnung verrät Ihnen den Verwendungszweck, der Parser muss den Datentyp jedoch korrekt verarbeiten.