Zum Inhalt springen

Certificate Decoder · Security

Zertifikats-Decoder & Kettenprüfer

Fügen Sie ein Zertifikat, eine fullchain.pem oder die komplette Ausgabe von openssl s_client -showcerts ein. Jedes X.509-Feld wird dekodiert, die Kettenreihenfolge geprüft und mit Begründung korrigiert, und jede Verbindung erhält ein echtes Signatur-Urteil — verifiziert, fehlgeschlagen oder nicht geprüft mit genanntem Algorithmus. Ein privater Schlüssel in der Eingabe wird übersprungen, nie geparst und nie irgendwohin gesendet: es gibt hier keinen Server, an den man ihn senden könnte.

Läuft in Ihrem Browser — nichts, was Sie einfügen, verlässt diese Seite. Wie wir das belegen

Läuft in Ihrem Browser Signaturen wirklich geprüft Kein Upload, keine Anmeldung Aktualisiert am 03.08.2026

Playground für Zertifikats-Decoder und Kettenprüfer

Examples

Paste a certificate, a fullchain.pem, or the whole output of openssl s_client -showcerts — everything outside the BEGIN/END markers is ignored. A private key is recognised and skipped, never parsed: there is no server here to send it to.

Results update as you type — press Enter to run now.

RFC 6125: a wildcard covers exactly one leftmost label, and an IP address must appear as an IP SAN. commonName is only consulted when the certificate has no SAN at all.

Result

Paste a certificate or a whole chain to see every field decoded, the chain order checked, and each signature verified — all inside this tab.

Die Lücke

Im Browser geht es. Das ist kein Beweis.

Ein Browser repariert eine kaputte Zertifikatskette für Sie. Fehlt ein Zwischenzertifikat, können Chrome und Safari es über die authorityInfoAccess-URL des Zertifikats nachladen oder eines wiederverwenden, das sie von einer fremden Website gecacht haben — das Schloss erscheint und der Fehler bleibt unsichtbar. curl, Go, Python und jeder CI-Runner tun nichts davon. Sie verwenden genau die gesendeten Zertifikate und scheitern mit unable to get local issuer certificate. Diese Asymmetrie ist die häufigste Art, wie ein Zertifikats-Deploy die manuelle Prüfung besteht und um 2 Uhr morgens einen Webhook zerbricht.

Die andere Hälfte des Problems ist, dass Zertifikatsausgaben absichtlich unlesbar sind. openssl x509 -text sind 60 Zeilen Hex pro Zertifikat, Ketten haben keine sichtbare Reihenfolge, und die Frage, die Sie wirklich haben — fehlt etwas, ist etwas abgelaufen, deckt das meinen Hostnamen ab — steht nirgends in diesem Dump. Diese Seite beantwortet diese drei Fragen zuerst und behält die vollständige Feldliste darunter.

Es ist auch die falsche Frage an einen Chatbot. Ein Sprachmodell, das einen Zertifikats-Dump liest, gleicht Textmuster ab: es liest notAfter vom falschen Zertifikat ab, rechnet Daten in beide Richtungen falsch, behauptet bereitwillig, eine Wildcard deckte zwei Labels ab, und kann eine Signatur überhaupt nicht prüfen, weil dafür wirklich gerechnet werden muss. Diese Seite parst das DER Byte für Byte und schickt die Signatur durch Web Crypto — damit Sie die erhaltene Antwort gegen ein Ergebnis prüfen können, das Sie mit openssl auf Ihrer eigenen Maschine reproduzieren.

Arbeiten Sie an einem Token statt an einem Zertifikat? Der JWT Decoder liest und prüft ein JWS, und der Hash-Generator berechnet dasselbe SHA-256, gegen das Sie einen Fingerprint vergleichen.

Die Pipeline

So funktioniert es.

Fünf deterministische Schritte, alle in Ihrem Browser-Tab — ein selbst geschriebener DER-Reader, der null zurückgibt statt zu werfen, und Web Crypto für den einen Teil, der echte Kryptografie ist.

  1. Blöcke finden, alles andere ignorieren.

    Gelesen wird nur Text zwischen BEGIN- und END-Markern, deshalb lässt sich ein openssl-s_client-Protokoll unverändert einfügen. Ein PRIVATE KEY-Block wird an seinem Label erkannt und übersprungen, ohne geparst zu werden; einem CSR oder einem PKCS#7-Bundle wird gesagt, was es ist und welcher Befehl es umwandelt.

  2. Base64 zu DER, DER zu Struktur.

    Ein selbst geschriebener Reader läuft durch das DER — keine Parser-Bibliothek, also wirft nichts bei verstümmelter Eingabe. DER ist eine kanonische Kodierung, und genau das macht einen minimalen Reader exakt statt bloß nachsichtig: BER-Konstrukte wie unbestimmte Längen werden abgelehnt statt geraten.

  3. X.509 so lesen, wie RFC 5280 es definiert.

    Seriennummer als exakte BigInt-Dezimalzahl, ein mehrwertiger RDN verbunden statt plattgemacht, der UTCTime-Wendepunkt bei 2049 beachtet und IPv4- wie IPv6-SANs korrekt formatiert. Werte werden wortgetreu angezeigt — ein Decoder, der bereinigt, was im Zertifikat steht, würde genau das verbergen, weswegen Sie gekommen sind.

  4. Die Kette über Key Identifier verbinden, nicht über Namen.

    Der authorityKeyIdentifier jedes Zertifikats wird gegen den subjectKeyIdentifier seines Ausstellers geprüft. So löst sich eine erneuerte CA mit demselben Namen wie ihre Vorgängerin korrekt auf, und ein cross-signiertes Paar wird als cross-signiertes Paar gemeldet statt als Duplikat.

  5. Jede Signatur mit Web Crypto verifizieren.

    Die signierten Bytes sind der tbsCertificate-Abschnitt, geprüft gegen den öffentlichen Schlüssel des Ausstellers: RSA PKCS#1 v1.5 mit SHA-1/256/384/512, ECDSA auf P-256/384/521, Ed25519 wo der Browser es hat. Jede Verbindung ist verifiziert, fehlgeschlagen oder nicht geprüft mit genanntem Algorithmus — nie ein nackter Boolean.

Referenz

Die Meldung, die Sie bekamen — und was sie heißt.

Neun Meldungen decken fast jeden Zertifikatsfehler in Produktion ab. Die meisten davon sind dieselben zwei Ursachen — ein fehlendes Zwischenzertifikat oder ein Name, der nicht in der SAN-Liste steht — in den Formulierungen verschiedener Hersteller.

Meldung Was sie wirklich bedeutet
unable to get local issuer certificate curl, openssl, Python, Node Die Kette endet unterhalb eines Roots, dem der Client vertraut — ein Zwischenzertifikat fehlt. Hängen Sie es an die Datei an, die der Server sendet.
x509: certificate signed by unknown authority Go Derselbe Fehler in Gos Formulierung: entweder ein fehlendes Zwischenzertifikat oder ein privater CA-Root, dem diese Maschine nicht vertraut.
self-signed certificate in certificate chain curl, openssl Die Kette enthält ein selbstsigniertes Zertifikat, dem der Client nicht vertraut. Meist ein privater CA-Root, manchmal ein unnötig mitgesendeter Root.
self-signed certificate curl, openssl Das Leaf hat sich selbst ausgestellt. Nichts außerhalb bürgt für den Namen — in Ordnung für eine Testkiste, nie für einen öffentlichen Endpunkt.
NET::ERR_CERT_AUTHORITY_INVALID Chrome, Edge Der Browser konnte keinen Pfad zu einem vertrauten Root bauen: ein fehlendes Zwischenzertifikat, das er nicht nachladen konnte, oder eine nicht vertraute CA.
NET::ERR_CERT_COMMON_NAME_INVALID Chrome, Edge Kein subjectAltName passt auf den Hostnamen. Ein passender commonName hilft nicht — Browser lesen ihn seit 2017 nicht mehr.
NET::ERR_CERT_DATE_INVALID · certificate has expired überall notAfter liegt in der Vergangenheit, oder notBefore in der Zukunft, oder die Uhr der klagenden Maschine ist falsch.
certificate is not yet valid curl, openssl, Java notBefore ist noch nicht erreicht. Entweder wurde das Zertifikat vor einer Rotation ausgestellt, oder es liegt Uhren-Drift vor — prüfen Sie beide Seiten.
unsupported certificate purpose openssl verify Der extendedKeyUsage enthält kein serverAuth, das Zertifikat ist damit nicht für TLS-Server-Authentifizierung nutzbar.

So sieht die richtige Kettenreihenfolge aus

Leaf zuerst, dann jedes Zwischenzertifikat. Der Root ist optional — und wenn er dabei ist, sind es nur Bytes, denn Vertrauen kommt aus dem Store des Clients.

fullchain.pem
fullchain.pem — leaf first, root optional and last

  1  CN = shop.example.com                 ← leaf   (CA:FALSE, carries the SANs)
  2  CN = Example Labs Intermediate R3     ← signs the leaf   (CA:TRUE, pathlen:0)
  3  CN = Example Labs Root X1             ← self-signed; the client already has it

  each certificate's authorityKeyIdentifier
  points at the subjectKeyIdentifier of the one below it

Kette holen, dann die Behauptung prüfen

Ein Ground-Truth-Werkzeug sollte gegen etwas anderes überprüfbar sein. Jeder Fingerprint auf dieser Seite ist das SHA-256 des vollständigen DER — dieselben Bytes, die openssl x509 -fingerprint hasht.

verify.sh
# The chain your server actually sends, ready to paste above
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null

# The claim this page makes is checkable against openssl on your own machine
openssl x509 -in isrgrootx1.pem -noout -fingerprint -sha256
  SHA256 Fingerprint=96:BC:EC:06:26:49:76:F3:74:60:77:9A:CF:28:C5:A7:
                     CF:E8:A3:C0:AA:E1:1A:8F:FC:EE:05:C0:BD:DF:08:C6

# ...and against the value ISRG publishes for Root X1. Three sources, one answer.

Nächster Schritt

Die Kette stimmt. Prüfen Sie jetzt, was sie schützt.

Ein Zertifikat ist ein Glied in einer Kette von Dingen, die übereinstimmen müssen: der JWT Decoder liest und prüft die Tokens, die der Endpunkt ausgibt, der Hash-Generator berechnet den Digest, gegen den Sie einen Fingerprint vergleichen, und der Reverse DNS / PTR Helper prüft, ob der Name im Zertifikat der Name ist, der auflöst. Alle laufen, wie diese Seite, vollständig in Ihrem Browser.

chain-check.txt
3 certificates — chain order OK
  leaf          shop.example.com          notAfter 2031-06-01
  intermediate  Example Labs Intermediate R3
  root          Example Labs Root X1      self-signed

signature verified   leaf  ←  intermediate   RSA PKCS#1 v1.5 with SHA-256
signature verified   int   ←  root           RSA PKCS#1 v1.5 with SHA-256
hostname www.shop.example.com   covered by *.shop.example.com

FAQ

Fragen, beantwortet.

Tippen Sie auf eine Frage, um die Antwort aufzuklappen.

Es bedeutet, dass die Kette, die Ihr Server sendet, endet, bevor sie etwas erreicht, dem der Client vertraut — fast immer, weil ein Zwischenzertifikat fehlt. Ein Client geht vom Leaf nach oben: Leaf → Intermediate → Root. In seinem Trust-Store liegen nur Roots; fehlt also das Zwischenzertifikat, das beide verbindet, läuft der Weg ins Leere und OpenSSL meldet Fehler 20 mit genau dieser Meldung. Fügen Sie Ihre Kette hier ein, und das fehlende Zwischenzertifikat wird mit seinem exakten Distinguished Name benannt — genau der String, den Sie brauchen, um die richtige Datei zu finden und anzuhängen.

Weil Browser unvollständige Ketten reparieren und Kommandozeilen-Clients nicht. Fehlt ein Zwischenzertifikat, können Chrome, Edge und Safari es über die URL in der Erweiterung authorityInfoAccess nachladen oder eines wiederverwenden, das sie von einer anderen Website gecacht haben — das Schloss erscheint und das Problem bleibt unsichtbar. curl, openssl s_client, Gos crypto/tls, Pythons requests und die meisten Sprach-Runtimes tun nichts davon: sie verwenden genau die Zertifikate, die Sie geschickt haben, und scheitern. Diese Asymmetrie ist der Grund, warum „bei mir im Browser geht es“ kein Beweis ist, und die häufigste Ursache dafür, dass ein Deploy die manuelle Prüfung besteht und einen Webhook zerbricht.

Nein — und es schadet auch nicht. Ein Client vertraut einem Root, weil dieser Root bereits in seinem eigenen Trust-Store liegt; eine über die Leitung gesendete Kopie beweist nichts, denn ein Angreifer könnte jeden beliebigen Root schicken. Es kostet also nur rund 1–2 KB bei jedem einzelnen Handshake. Enthalten sein muss dagegen zuerst das Leaf und danach jedes Zwischenzertifikat darüber. Dieses Werkzeug beschriftet jedes Zertifikat mit seiner Rolle und sagt Ihnen, in welchem der beiden Fälle Sie stecken: ein Root, der bloß überflüssig ist, oder ein Zwischenzertifikat, das wirklich fehlt.

Das Leaf ist das Zertifikat für Ihren Hostnamen: es trägt die subjectAltName-Liste, hat CA:FALSE in seinen basicConstraints und ist das, was der Server präsentiert. Ein Intermediate ist ein CA-Zertifikat, das im Auftrag eines Roots Leafs signiert; es hat CA:TRUE, meist mit pathlen:0, damit es nicht weiter delegieren kann. Ein Root ist ein CA-Zertifikat, das sich selbst signiert hat — Subject und Issuer sind identisch — und ihm wird nur vertraut, weil er in Betriebssystemen und Browsern mitgeliefert wird. CAs halten Roots offline und signieren über Intermediates, gerade damit ein kompromittierter Signaturschlüssel ersetzt werden kann, ohne den Root neu auszustellen.

Bewusst nicht — und das ist die ehrliche Antwort, nicht eine Einschränkung, die man umgehen sollte. „Vertrauenswürdig“ ist eine Eigenschaft des Clients, nicht des Zertifikats: Chrome, Firefox, macOS, Windows und Ihre Java-Runtime führen unterschiedliche Root-Listen, und Roots werden zwischen Releases entfernt. Eine Kopie eines Trust-Stores in diese Seite zu packen würde bedeuten, dass sie selbstsicher „vertrauenswürdig“ für einen Root anzeigt, den Chrome letzten Monat entfernt hat — genau die Klasse selbstsicher falscher Antworten, die dieses Werkzeug aufdecken soll. Stattdessen liefert es überprüfbare Rechnung: die Kette ist in sich konsistent, jede Signatur wurde gegen den Schlüssel darüber geprüft, und die Fingerprints stehen da, damit Sie sie mit dem vergleichen, was eine CA veröffentlicht.

Eine Wildcard ersetzt genau ein Label, und nur das linkeste (RFC 6125 §6.4.3). *.example.com passt also auf api.example.com und www.example.com; es passt nicht auf a.b.example.com, denn das bräuchte zwei Labels, und nicht auf das nackte example.com, denn dort gibt es kein Label zu ersetzen — weshalb Zertifikate die Apex-Domain normalerweise als zweiten SAN führen. Eine Wildcard wird außerdem nie in den obersten zwei Labels akzeptiert (*.com ist bedeutungslos) und nie innerhalb eines Labels (w*.example.com ist kein gültiges Muster). Das Hostnamen-Feld auf dieser Seite wendet jede dieser Regeln an und sagt Ihnen, welche das Urteil entschieden hat.

Ein Zertifikat ist von Natur aus öffentlich: es wird am Anfang jedes TLS-Handshakes im Klartext gesendet, und für jedes öffentlich vertrauenswürdige Zertifikat steht es ohnehin schon in Certificate-Transparency-Logs. Es gibt also nichts zu schützen. Ein privater Schlüssel ist das Gegenteil, und auch damit geht diese Seite sicher um: das gesamte Werkzeug ist eine statische Seite ohne Server dahinter, ein eingefügter PRIVATE KEY-Block wird an seinem Label erkannt, nie geparst und nie irgendwohin gesendet — die Seite sagt Ihnen das ausdrücklich. Das können die meisten Zertifikats-Decoder nicht behaupten, weil sie Ihre Eingabe an ein Backend schicken. Falls Sie einen Schlüssel dort eingefügt haben: rotieren Sie ihn.

Weil das zwei völlig verschiedene Antworten sind und sie zu vermischen eine Lüge wäre. „Fehlgeschlagen“ heißt: der öffentliche Schlüssel des Ausstellers wurde auf die Signatur angewandt und passte nicht — das Zertifikat wurde verändert, oder das ist nicht der Aussteller. „Nicht geprüft“ heißt: die Prüfung war überhaupt nicht möglich, und der Grund wird immer genannt: RSASSA-PSS trägt Hash, Salt-Länge und Maskenfunktion in seinen Parametern, und dieses Werkzeug rät sie nicht; SHA-224, MD5 und DSA sind in Web Crypto nicht implementiert; Ed25519 braucht Chrome 137 oder Safari 17. Ein Boolean würde für all das „nicht verifiziert“ anzeigen und Sie es als „gefälscht“ lesen lassen. Jede Kettenverbindung hier hat drei Zustände, nie zwei.

Weil Browser 2017 aufgehört haben, den commonName zu lesen. Chrome 58 und Firefox 48 haben den Fallback entfernt, und jeder aktuelle Client verlangt, dass der Hostname stattdessen in der Erweiterung subjectAltName steht — ein Zertifikat mit perfektem CN und ohne SAN passt auf überhaupt nichts und erzeugt NET::ERR_CERT_COMMON_NAME_INVALID. Es ist weiterhin erlaubt, den Namen zusätzlich in den CN zu schreiben, und die meisten CAs tun es, aber es ist Dekoration. Dieses Werkzeug zeigt die SAN-Liste genau deshalb getrennt vom Subject und warnt, wenn ein Zertifikat gar keinen SAN hat.

More free, private DevOps tools.

Der Certificate Decoder ist eines der Werkzeuge in OpsCanopy — einem wachsenden Schirm browserbasierter Validatoren, Konverter und Tester, die niemals einen Server berühren.

39 kostenlose Tools, jedes einzelne offlinefähig — opscanopy.com funktioniert ohne Registrierung, und nichts wird hochgeladen.

Verwandte Sicherheits-Werkzeuge: der JWT Decoder, der Hash-Generator für die Digests hinter einem Fingerprint und der Reverse DNS / PTR Helper, um zu prüfen, ob der Name im Zertifikat der Name ist, der auflöst — oder durchstöbern Sie das vollständige Werkzeugverzeichnis.

Bereitgestellt wie besehen zur bequemen Nutzung. Diese Seite berichtet, was in einem Zertifikat steht und ob jede Signatur aufgeht; sie behauptet nicht und wird nie behaupten, ein Zertifikat sei vertrauenswürdig — Vertrauen liegt im Root-Store des Clients, und es gibt hier auch keine Sperrlisten- oder Certificate-Transparency-Prüfung (beides braucht das Netz). OpsCanopy ist kostenlos und offen.