Certificate Decoder

Paste an SSL certificate or a whole chain to read every field and check each link, with trust in every major browser. Nothing leaves your browser.

X.509 per RFC 5280 · the Mozilla, Chrome, Apple and Microsoft root stores (CCADB) · CT logs from Google's and Apple's lists · decoded in your browser

What's inside an SSL certificate?

An SSL certificate is an X.509 document signed by a certificate authority: it ties a public key to the names it may be used for, between two dates.

Its core fields are fixed by RFC 5280: a version, a serial number the CA chose, the signature algorithm, the issuer's name, the validity period, the subject's name and the subject's public key. Browsers match a site only against the names in the Subject Alternative Name extension (RFC 9525), not the common name.

Everything else is an extension: what the key may do, the purposes the certificate allows, whether it may sign other certificates, where to find its issuer and its revocation status, its policies, and the signed proofs that it was logged in Certificate Transparency. Below is github.com's certificate as the decoder reads it, recorded on October 21, 2026.

Chain of trust

  1. Site certificategithub.comSectigo · DV · ECDSA P-256sent by the server
  2. IntermediateSectigo Public Server Authentication CA DV E36ECDSA P-256 · until Mar 2036sent by the server
  3. RootSectigo Public Server Authentication Root E46until Mar 2046from the root stores
  4. Root storesTrusted everywhere
Issued Sep 1, 2026 · 90 daysrenew by Oct 31, 2026200-day maximum
Today · day 51 of 90Expires Nov 29, 2026Today · day 51 of 90 · Expires Nov 29, 2026
github.com's certificate on October 21, 2026: its place in the chain and its lifetime, drawn by the decoder from the certificate alone.
Certificate decoder: github.com's certificate decoded, valid and trusted in all 4 browser root stores, with its chainCertificate decoder: github.com's certificate decoded, valid and trusted in all 4 browser root stores, with its chainPaste or dropA PEM block, a whole chain, bare base64, hex, or a .crt, .cer, .der or .pem file. Nothing is uploaded.The verdictThe expiry date, the days left and which browser root stores trust it, from what you pasted alone.Convert or check livePEM and DER files made in your browser, or the live site in SSL Checker.The chainEach certificate up to its root, with every signature checked the way a browser checks it.The root storesMozilla, Chrome, Apple and Microsoft, from the CCADB lists the browsers publish.
github.com's chain, decoded on the page: the verdict, the downloads and the chain up to the four browser root stores. Select a number to see what each part shows.

How do I decode a certificate with OpenSSL?

openssl x509 -in cert.pem -text -noout prints every field of a PEM certificate; add -inform der for a binary one.

OpenSSL's x509 command can also print one field at a time: -subject, -issuer, -dates or -enddate, -serial, -ext subjectAltName, and -fingerprint -sha256. To decode the certificate a server sends, fetch it first with openssl s_client, which prints the chain it receives when given -showcerts.

openssl x509 -in cert.pem -text -noout

For a binary .der or .cer file, add -inform der.

PEM, DER, CRT and CER: what's the difference?

PEM and DER are two encodings of the same certificate: DER is the binary form, and PEM is that DER in base64 between BEGIN and END lines.

PEM is defined in RFC 7468 and travels well in email and configuration files; most servers want it. Windows and Java tools often use DER. The extensions .crt, .cer and .cert don't say which: either encoding can sit behind them, which is why the decoder reads both.

So a PEM decoder only has to undo the base64 to reach the DER bytes; reading those bytes as an X.509 certificate is the real work. Converting changes only the encoding, never the certificate or its signature: openssl x509 -in cert.pem -outform der -out cert.der and back with -inform der. A .p7b file (PKCS#7) holds a list of certificates: openssl pkcs7 -print_certs -in chain.p7b writes them as PEM. A .pfx or .p12 file (PKCS#12) also holds the private key: openssl pkcs12 -in site.pfx -nokeys takes the certificates out without it.

PEM (text)

-----BEGIN CERTIFICATE-----
MIID7TCCA5SgAwIBAgIRAKWevbWWdR239cCVB5YTlTwwCgYIKoZIzj0EAwIwYDEL
MAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDE3MDUGA1UEAxMu
U2VjdGlnbyBQdWJsaWMgU2VydmVyIEF1dGhlbnRpY2F0aW9uIENBIERWIEUzNjAe
…

DER (bytes)

30 82 03 ed 30 82 03 94 a0 03 02 01 02 02 11 00
a5 9e bd b5 96 75 1d b7 f5 c0 95 07 96 13 95 3c
30 0a 06 08 2a 86 48 ce 3d 04 03 02 30 60 31 0b
…
The start of the same certificate twice: the base64 in the PEM is the DER bytes written as text.

How do I read a certificate chain?

Read it upwards: each certificate names its issuer, and the issuer's certificate holds the public key that checks the signature below it, up to a root the browser already trusts.

A server sends its own certificate first and then the intermediates; the root stays out, because the browser has it. When an intermediate is missing, Chrome fetches it from the address in the certificate and Firefox fills it from its own list, but apps and other clients often fail: a chain that works in one browser can break elsewhere.

The decoder checks each link the way a browser does: the names match, the signature verifies with the issuer's key, the issuer may sign certificates, and the path ends at a root in the Mozilla, Chrome, Apple or Microsoft store. It never fetches a missing certificate: paste the whole chain, or check the live site with SSL Checker.

Chain of trust

  1. Site certificategithub.comSectigo · DV · ECDSA P-256sent by the server
  2. IntermediateSectigo Public Server Authentication CA DV E36ECDSA P-256 · until Mar 2036sent by the server
  3. RootSectigo Public Server Authentication Root E46until Mar 2046from the root stores
  4. Root storesTrusted everywhere

What do the certificate extensions mean?

Extensions say what the certificate is for and how to check it; the ones a browser reads on a website's certificate are these.

ExtensionWhat it says
Subject Alternative NameEvery name and address the certificate covers. Browsers use only these.
Key UsageWhat the key may do: sign (digitalSignature), encrypt a key (keyEncipherment), sign certificates (keyCertSign).
Extended Key UsageThe purposes: TLS server, TLS client, code signing, email.
Basic ConstraintsWhether this is a CA certificate that may sign others, and how many levels below it.
Authority Information AccessWhere to fetch the issuer's certificate and the CA's OCSP responder.
CRL Distribution PointsWhere the CA publishes its revocation list.
Certificate PoliciesThe validation level: domain (DV), organization (OV) or extended (EV) validation.
Signed Certificate TimestampsProof that Certificate Transparency logs recorded the certificate, which Chrome and Safari require.

How long can an SSL certificate be valid?

A publicly trusted certificate issued since 15 March 2026 may last at most 200 days, down from 398; the limit falls to 100 days on 15 March 2027 and to 47 days on 15 March 2029.

The schedule is the CA/Browser Forum's ballot SC-081, in section 6.3.2 of the Baseline Requirements, and Chrome enforces it by the certificate's start date. The decoder compares each certificate with the limit for its own issue date and says when one is over it. Certificates from a private CA, and self-signed ones, are outside these rules.

before 15 March 2026398 days
15 March 2026200 days
15 March 2027100 days
15 March 202947 days

Does this private key match the certificate?

It does when the public key inside the certificate is the public half of the private key: compare a hash of each.

With OpenSSL, take the public key from each and hash it: the two lines below print the same value for a matching pair, whatever the key type. The CSR Decoder does the same comparison in your browser, for a certificate, a request and a key together.

openssl x509 -in cert.pem -noout -pubkey | openssl sha256
openssl pkey -in key.pem -pubout | openssl sha256

Is it safe to paste a certificate here?

Yes. A certificate is public, and this page reads it in your browser without sending it anywhere.

Every server sends its certificate to every visitor, and public CAs log each one in Certificate Transparency, where anyone can read it. The private key is the secret: it never belongs in a web page. If one is pasted here, the decoder leaves it unread and says so.

Your browser

  1. Your paste
  2. Decoded
  3. Chain checked against the root stores
  4. Shown

Our server

Nothing is sent

Certificate Decoder FAQ

How do I decode an SSL certificate?

Paste it into the SSL certificate decoder above: the PEM text from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE-----, a bare base64 body, a hex dump, or a .crt, .cer, .der or .pem file. The decoder shows every field, checks the chain if you paste the intermediates too, and says which browsers trust it. On a computer, openssl x509 -in cert.pem -text -noout prints the same fields as text.

What is the difference between PEM and DER?

They hold the same certificate. DER is the binary encoding of the certificate's ASN.1 structure. PEM is that DER in base64 between BEGIN and END lines (RFC 7468), so it can travel in email and config files. File extensions don't decide the format: a .crt or .cer file can hold either, which is why the decoder reads both.

How do I convert PEM to DER, or DER to PEM?

Decode the certificate above and use Download .der or Download .pem: the file is made in your browser. With OpenSSL, openssl x509 -in cert.pem -outform der -out cert.der turns PEM into DER, and openssl x509 -inform der -in cert.der -out cert.pem turns it back. Only the encoding changes; the certificate and its signature stay the same.

How can I see when a certificate expires?

The verdict line gives the expiry date and the days left, and the lifetime ruler shows where today falls between the start and the end. With OpenSSL, openssl x509 -in cert.pem -noout -enddate prints the date. Publicly trusted certificates issued since 15 March 2026 last at most 200 days, so renewal should be automatic.

Why does the decoder say my chain is incomplete?

A browser needs every certificate between yours and a root it trusts. The server must send the intermediates; the root is already in the browser. When the intermediate isn't in what you pasted, no path can be built here: this page never fetches anything. Paste the intermediate from your CA's bundle, or check the live site with SSL Checker, which fetches it.

How do I tell a DV, OV or EV certificate apart?

By the certificate policies extension. The CA/Browser Forum reserves policy identifiers for each level: 2.23.140.1.2.1 for domain validated, 2.23.140.1.2.2 for organization validated, 2.23.140.1.1 for extended validation, and CAs also use their own EV identifiers. The decoder reads them and shows the level as a chip. The organization name in the subject is another sign of OV or EV.

Can I check if a certificate is revoked here?

No. Revocation is a question for the certificate authority, through its OCSP responder or its certificate revocation list, and this page makes no network requests with what you paste. The certificate's OCSP and CRL addresses are shown under the extensions. To check revocation, run the live site through SSL Checker, which asks the CA.

Is my certificate or private key uploaded?

No. Decoding, the chain check and the trust check all run in your browser; nothing you paste is sent anywhere or stored. A certificate is public anyway: every server sends its own to every visitor. A private key is not, so if one is pasted the page leaves it unread and says so.

Missing something?Suggest a feature or a new tool