X.509 Certificate Decoder
Paste a PEM certificate — or a whole chain — to see who it was issued to, who issued it, when it expires, which hostnames it covers, and what its extensions allow. Decoding happens locally in your browser. This tool never validates a chain or checks revocation, because that would mean contacting someone, and nothing you paste leaves this page.
What this tool does and doesn't do
A certificate is public by design: it's handed to every client that connects to a server. So the certificate itself isn't secret — but pasting it into a random website is still a poor habit, because the same box also invites people to paste CSRs, bundles that include the private key, and internal certificates whose hostnames reveal your infrastructure. A decoder that never sends anything removes the question.
This tool reads the certificate's own contents and stops there. It does not build or validate a chain, verify the signature, check revocation (CRL or OCSP), or compare against a trust store. Each of those needs either a set of trusted roots or a network request, and "is this certificate trusted?" is a different question from "what does this certificate say?".
If a private key is pasted alongside a certificate, it is skipped and never displayed. A private key should never go into any website; if one has been exposed, treat it as compromised and rotate it.
Reading a certificate
PEM, DER and the BEGIN line
DER is the binary encoding of a certificate. PEM is that same binary, Base64-encoded and
wrapped between text markers so it survives email and copy-paste. The marker names what's
inside: CERTIFICATE for a certificate,
CERTIFICATE REQUEST for a CSR,
PUBLIC KEY for a bare public key, and
PRIVATE KEY (or
RSA PRIVATE KEY,
EC PRIVATE KEY) for the one thing you must
never share. A chain file is just several certificate blocks back to back.
Subject, issuer and self-signed certificates
The subject is who the certificate identifies; the issuer is the certificate authority that
signed it. When they're identical the certificate is self-signed — normal for a root CA and
for a development certificate, and a red flag on a public website. Names are lists of
attributes such as C (country),
O (organization) and
CN (common name).
Subject Alternative Names, not the common name
Browsers match the hostname you typed against the Subject Alternative Name (SAN) extension,
not the common name. A certificate whose only hostname is in the CN will be rejected by modern
clients. SANs can be DNS names (including wildcards like
*.example.com, which covers exactly one
label), IP addresses, email addresses and URIs.
Key Usage and Extended Key Usage
Key Usage says which cryptographic operations the key may perform:
digitalSignature,
keyEncipherment,
keyCertSign (signing other certificates) and so
on. Extended Key Usage narrows the purpose:
-
serverAuth— a TLS server certificate -
clientAuth— a TLS client certificate (mutual TLS) codeSigning— signing softwareemailProtection— S/MIME-
OCSPSigning— signing revocation responses
Basic Constraints and path length
CA: TRUE marks a certificate that may sign others;
an ordinary server certificate says
CA: FALSE. A path length limits how many
intermediate CAs may sit below this one — a path length of 0 means it can sign only end-entity
certificates.
Fingerprints
A fingerprint is a hash of the certificate's DER bytes, used to identify a specific
certificate without comparing every byte. Browsers and pinning configuration use SHA-256;
SHA-1 fingerprints still appear in older tooling. The values shown here are computed with your
browser's own Web Crypto API and match what
openssl x509 -fingerprint prints.
FAQ
How do I get a certificate to paste in?
To fetch the chain a server presents:
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null
Copy the BEGIN CERTIFICATE blocks it prints. To
cross-check this tool against OpenSSL for a local file, use
openssl x509 -in cert.pem -noout -text.
Does "valid" here mean the certificate is trusted?
No. "Valid" only means the current date falls inside the certificate's validity window, compared against your browser's local clock. It says nothing about whether the issuer is trusted, whether the signature checks out, or whether the certificate has been revoked.
Why is an intermediate or root shown as "leaf" or "self-signed"?
The role label is worked out from the certificate's own fields — whether the issuer equals the
subject and whether Basic Constraints says CA: TRUE — not from its position in what you pasted. A certificate with no Basic Constraints at all is
treated as an end-entity certificate.
Can it decode a CSR or a CRL?
Not yet. Those blocks are skipped with a note. A separate CSR decoder is planned.
Related tools
- JWT Decoder — Read a token’s header and payload, and see when it expires.
- Base64 Encoder & Decoder — Encode and decode Base64 and Base64URL, text or files.
- UUID & Hash Generator — Generate v4 UUIDs, or SHA-1/256/384/512 hashes of any text.
- chmod Calculator — Convert 755 ↔ rwxr-xr-x and see exactly who can do what.
- Format Identifier — Paste anything to find out what it is (a JWT, JSON, a certificate, Base64, a cron schedule and more), then open it in the right tool.