Skip to content
Advertisement

Certificate & CSR Decoder

Read an X.509 certificate, a chain or a signing request — subject, SANs, validity, key, extensions and fingerprints, all decoded in your browser.

Decoder Crypto

This describes a certificate; it does not vouch for one

There is no signature check and no chain validation here, because a web page has no access to any trust store — that is a property of your operating system, not of a document. Everything below is what the certificate claims. Use openssl verify or your browser's own connection info when you need to know whether those claims hold.
1939 chars

Drop a file here, or

Or drop a binary DER file — .der, .cer, .crt — read in this browser, never uploaded.

Block 1 — CA certificate

Subject
CN=ISRG Root X1, O=Internet Security Research Group, C=US
Issuer
CN=ISRG Root X1, O=Internet Security Research Group, C=US Same as the subject — this certificate is self-issued.
Serial number
8210CFB0D240E3594463E0BB63828B00 172886928669790476064670243504169061120
Signed with
SHA-256 with RSA
Public key
RSA, 4096-bit Exponent 65537, the conventional choice.
Not before
2015-06-04T11:04:38Z
Not after
2035-06-04T11:04:38Z
Version
v3
Certificate authority
Yes
Key usage
keyCertSign, cRLSign
Subject alternative names
none Without these, no current browser will accept this certificate for any hostname.

Fingerprints

SHA-256
SHA-1

3 extensions

  • Key Usagecritical

    keyCertSign, cRLSign

  • Basic Constraintscritical

    CA: yes

  • Subject Key Identifier

    79B459E67BB6E5E40173800888C81A58F6E99B6E

How Certificate & CSR Decoder works

An X.509 certificate is a signed statement binding a public key to a set of names. Underneath the familiar `-----BEGIN CERTIFICATE-----` wrapper is base64, and underneath that is DER: a binary encoding where every value is a tag byte saying what it is, a length, and that many bytes of content, nested to whatever depth the structure needs. Nothing in the format is self-describing in a human sense — the tree is just integers, strings and object identifiers, and knowing that the third element of a particular sequence is the serial number comes entirely from the specification, not from the bytes.

That structure is why a certificate can be read offline. Decoding walks the tag-length-value tree and maps it onto the fields RFC 5280 defines: version, serial number, the algorithm the issuer signed with, the issuer and subject as sequences of relative distinguished names, a validity window with two timestamps, and the subject public key with its own algorithm and parameters. Then come the extensions, which is where almost everything that matters in practice lives — the subject alternative names that browsers actually match against, basic constraints saying whether this certificate may sign others, key usage and extended key usage limiting what the key may do, and pointers to revocation and issuer-information endpoints.

The names are the part most often misread. The Common Name in the subject looks authoritative and has not been used for hostname matching by any current browser for years; the Subject Alternative Name extension is what is checked, and a certificate whose CN says one thing while its SAN list says another will be rejected for the hostnames only the CN mentions. Timestamps have their own quirk: certificates use UTCTime with a two-digit year up to 2049 and GeneralizedTime after that, and the two-digit form pivots at 50, so a year of 49 means 2049 and 50 means 1950.

What a browser tool fundamentally cannot do is tell you a certificate is valid. Validity is a property of a chain, not of a document: it requires the issuer’s certificate, then that issuer’s issuer, up to a root that the verifying system already trusts, plus signature verification at every link and a revocation check at each step. A web page has no access to any operating system or browser trust store, so it can describe what a certificate claims, compute its fingerprints, and tell you whether the dates have passed — but it cannot vouch for it, and any tool that implies otherwise is making a claim it has no basis for.

Reference

  • PEM = "-----BEGIN <label>-----" + base64(DER) + "-----END <label>-----"
  • DER triple: tag byte · length (short form < 128, long form 0x80|n then n bytes) · content
  • Certificate ::= SEQUENCE { tbsCertificate, signatureAlgorithm, signatureValue }
  • Fingerprint = SHA-256 or SHA-1 over the whole DER — not over the PEM text, and not over the public key
  • UTCTime YYMMDDHHMMSSZ (years 50–99 → 19xx, 00–49 → 20xx) · GeneralizedTime YYYYMMDDHHMMSSZ
  • Common OIDs: 2.5.4.3 commonName · 2.5.29.17 subjectAltName · 2.5.29.19 basicConstraints

How to use this decoder

  1. Paste the PEM block, or drop the file in

    The BEGIN and END lines can stay. A DER file that is not text at all can be dropped instead, and a certificate request from `openssl req` is read the same way as a certificate.

  2. Paste the whole chain if you have one

    Several concatenated blocks are decoded in order, one panel each, which is the quickest way to see whether the intermediate someone handed you actually issued the leaf sitting above it.

  3. Check the names before anything else

    The subject alternative names are what a client matches a hostname against. A missing entry there is the cause of most certificate errors that look inexplicable given a correct-looking Common Name.

  4. Read the validity window

    Both timestamps are shown along with how long is left. A certificate that is not valid yet fails exactly as loudly as an expired one, which catches people who generate ahead of a deployment on a machine with a skewed clock.

  5. Compare a fingerprint when you need identity, not description

    The SHA-256 digest over the DER is the value to match against what a server presents or what a pinning configuration expects. It is shown in the colon-separated form OpenSSL and browser certificate viewers print.

Worked examples

The name that is actually checked

Given
A certificate with CN=example.com and a SAN list of www.example.com and api.example.com
Result
Valid for www.example.com and api.example.com — and not for example.com

The bare apex is in the Common Name only, which no current browser consults. This is the single most common reason a certificate that "obviously covers" a domain does not.

A leaf that cannot be an issuer

Given
basicConstraints: CA:FALSE, keyUsage: digitalSignature, keyEncipherment
Result
An end-entity certificate — it may authenticate a server, and may not sign another certificate

CA:TRUE with a pathLenConstraint is what an intermediate carries. A chain that presents a leaf where an intermediate belongs fails here, visibly, before anything about the signature is considered.

A key size read from the key itself

Given
An EC certificate over the P-256 curve
Result
Public key: EC, 256-bit, prime256v1 (secp256r1)

A 256-bit elliptic-curve key is roughly comparable to a 3072-bit RSA key in strength, which surprises people used to reading RSA sizes. The curve is identified by an OID inside the key’s algorithm parameters.

A signing request, not a certificate

Given
A block labelled CERTIFICATE REQUEST
Result
Subject, public key and requested extensions — with no issuer and no validity dates

A CSR is unissued by definition, so those fields do not exist yet. Checking the subject and the requested SANs before sending it off is much cheaper than reissuing afterwards.

The fingerprint that matters

Given
A leaf certificate, hashed with SHA-256
Result
A 32-byte digest shown as 64 hex characters in colon-separated pairs

It is computed over the DER bytes, so the same certificate gives the same fingerprint whether it arrived as PEM text or as a binary file. Whitespace and line wrapping in the PEM make no difference.

When to use it

  • Finding out why a browser rejects a certificate that appears, from its Common Name, to cover the hostname being visited.
  • Confirming what a certificate authority actually issued, before a renewal is deployed and the mistake becomes an outage.
  • Checking the expiry date of a certificate someone emailed you, without installing it or trusting a third-party site with it.
  • Verifying that a certificate signing request carries the subject and alternative names you meant, while it is still cheap to regenerate.
  • Matching a fingerprint against the one a pinning configuration, an mTLS peer or a monitoring check expects.
  • Reading an intermediate to see its path length constraint and understand where in a chain it is allowed to sit.

Things to watch out for

  • This tool describes a certificate; it does not vouch for one. Signature verification and chain building both need the issuing certificates and a trusted root store, and a web page has access to neither. Treat everything here as a reading of what the document claims.
  • The decoding happens entirely in this browser. A private key should still never be pasted into any web page, but a certificate is public by design — it is sent to every client that connects — so reading one here discloses nothing.
  • A days-remaining figure comes from your own device’s clock. If a certificate reads as expired when the issuer says otherwise, check the clock before the certificate; skewed system time causes both false expiries and certificates that are somehow not valid yet.
  • Extensions marked critical must be understood by any client that processes the certificate, and a client that meets an unknown critical extension is required to reject the whole thing. Unrecognised object identifiers are shown in numeric form rather than being hidden.
  • Malformed input is reported rather than partially decoded. A truncated block, an unexpected tag or an indefinite length — which DER forbids, though BER allows it — stops the walk with a message rather than producing a half-read structure that looks plausible.

Frequently asked questions

Can this tell me whether a certificate is trusted?

No, and nothing running in a web page can. Trust is decided by building a chain up to a root your system already accepts and verifying every signature along the way, which needs a trust store the browser does not expose.

Is it safe to paste a certificate into a web page?

A certificate is public information — a server hands it to every client that connects. This one is decoded locally and never leaves the browser in any case. The private key is a different matter and should never be pasted anywhere.

Why does my certificate not work for the domain in its Common Name?

Because hostname matching uses the subject alternative name extension exclusively. Current browsers have ignored the Common Name for this purpose for years, so a name that appears only there is effectively not covered at all.

What is the difference between a certificate and a CSR?

A signing request carries a subject, a public key and the extensions being asked for, signed by the requester. A certificate is what an authority returns: the same information plus an issuer, a validity window and the authority’s signature.

Which fingerprint should I compare?

SHA-256 over the DER encoding, unless something specifically asks for SHA-1. Both are shown, but SHA-1 survives only because older documentation and some device interfaces still print it, not because it is a good choice now.

Can it read a PFX or PKCS#12 file?

No. Those are encrypted containers that usually hold a private key alongside the certificate, so opening one requires a password and would mean handling key material. Export the certificate to PEM or DER first.

All devops tools