Certificate & CSR Decoder

Read certificates, CSRs, .p7b bundles and CRLs — then check the chain reaches a trusted root, covers your host name, follows the CA/Browser Forum rules, and isn’t revoked.

Free · no sign-up · updated

Runs entirely in your browser. Nothing you enter leaves this page.

requests since opened: 0
Verify it yourself

This page is served with a security policy your browser enforces: it cannot open connections or load anything from other sites — not even to us.

  1. Open your browser’s developer tools (F12, or ⌥⌘I on Mac) → Network tab, then use the tool. No new requests appear.
  2. Or disconnect from the internet after the page loads — the tool keeps working, because it never needed the network.
  3. See the rule itself: in the Network tab, select this page’s document → Response Headers → content-security-policy contains connect-src 'none' and no 'unsafe-inline' for scripts.
  4. Press Test the lock: the page tries a harmless request and the browser blocks it (the Console shows the refusal).

tools v0.9.1 · build 0efa119

How to use
  1. Paste PEM blocks or open a file — or use “Get the chain from a server” for a ready command.
  2. Read the trust verdict, the expiry overview (for several certificates), then the lint and details.
  3. Type a host name to check coverage; add the CA’s CRL to check revocation.
Get the chain from a server

This page cannot connect to servers. Run this command, then paste its output in the box above.

What “trusted” actually means

A certificate is trusted when a chain of signatures leads from it to a root certificate your software already trusts. The decoder builds that chain from what you paste: it checks each signature, the validity dates, that every issuer is allowed to act as a CA, and that the last link is in the bundled Mozilla root store, the list Firefox and most Linux systems use.

The most common production fault is a missing intermediate certificate. Browsers often hide it, because they cache intermediates or download them from the URL inside the certificate, so the site works in Chrome but fails in curl, Java, Python or on Android. Paste exactly what the server sends (the “Get the chain from a server” command does this) and a gap shows up immediately.

Host names, lifetimes and the lint

Browsers match the host name only against the Subject Alternative Name list; the Common Name has been ignored for years (RFC 9525). Type a host name to see whether a certificate covers it, including how wildcards match one label only.

Publicly trusted TLS certificates follow the CA/Browser Forum Baseline Requirements. Their maximum lifetime is shrinking: 398 days before March 2026, 200 days now, and 47 days by 2029. The lint flags lifetimes over the limit for the issue date, weak keys, missing extensions and other rules a CA should never get wrong — useful for private CAs, which are not audited.

Revocation without the network

This page cannot connect anywhere, so it never asks an OCSP responder. Paste the CA’s CRL instead and the decoder checks the serial number against it and verifies the CRL’s signature. CRLs matter more again since Let’s Encrypt stopped running OCSP in 2025 and browsers rely on CRL-based revocation lists.

Common questions

Is it safe to paste a certificate here?

Yes. Certificates and CSRs are public by design, and this page cannot send anything anywhere: your browser blocks every connection it tries to make. Never paste a private key — the decoder refuses them.

How do I check a website’s certificate chain?

Open “Get the chain from a server”, enter the host name and run the command it gives you. Paste the output here to see whether the chain reaches a trusted root, covers the host name and is in the right order.

Why does my certificate show “not trusted”?

Usually an intermediate certificate is missing from what the server sends, or the certificate comes from a private CA. The chain check shows exactly which link is missing.

Known limitations
  • Revocation is checked only against a CRL you paste — no OCSP or CT lookups.
  • Trust uses a snapshot of Mozilla’s root store; private roots aren’t included.
  • The lint covers the common Baseline Requirements, not all of them.
  • Private keys are refused; files over 50 MB aren’t opened.
  • Browser extensions can read any page — use a private window for sensitive data. How the lock works