SSL certificate decoder

Paste a certificate to see the names it covers and when it expires, then check it against your hostname, your chain and your CSR before you install it. Live SSL checkers tell you what's wrong once it's on the server. This one reads the file in your browser, and your text stays on this page.

Covered by www.example.com
Expires

Jan 1, 2036

Chain
2 certificates line up: each one's issuer matches the next one's subject.
CSR
Same public key as certificate 1
Lifetime
3,653 days. On Jan 1, 2026, a public CA couldn't issue more than 398.
Certificate 1 of 2 · serverwww.example.com
Names (SANs)
  • www.example.com
  • example.com
  • *.api.example.com
Subject
C=US, ST=Texas, L=Austin, O=Example Inc, CN=www.example.com
Issuer
C=US, O=Example Trust, CN=Example Issuing CA
Valid from
Jan 1, 2026, 12:00 AM UTC
Valid to
Jan 1, 2036, 12:00 AM UTC
Key
ECDSA P-256
Signature
ECDSA with SHA-256
Serial
04:D2:CA:FE
Version
3
CA
No
Key usage
  • Digital signature
Extended usage
  • TLS server
  • TLS client
Policies
  • Organization validated (OV)
OCSP
  • http://ocsp.example.com
CA issuers
  • http://ca.example.com/issuing.crt
CRL
  • http://ca.example.com/issuing.crl
Subject key ID
69:E2:8E:F2:83:73:5F:43:A3:2B:A9:2B:11:01:F4:14:74:92:5C:CC
Authority key ID
62:AA:9F:A6:77:9F:48:58:86:FA:D3:31:13:2F:D2:2C:F0:D7:B0:E1
SHA-256
Calculating…
SHA-1
Calculating…
Public key SHA-256
Calculating…
Certificate 2 of 2 · rootExample Issuing CA
Subject
C=US, O=Example Trust, CN=Example Issuing CA
Issuer
C=US, O=Example Trust, CN=Example Issuing CA
Valid from
Jan 1, 2026, 12:00 AM UTC
Valid to
Dec 31, 2046, 11:59 PM UTC
Key
ECDSA P-256
Signature
ECDSA with SHA-256
Serial
0A:11:CE
Version
3
CA
Yes, path length 0
Key usage
  • Certificate signing
  • CRL signing
Subject key ID
62:AA:9F:A6:77:9F:48:58:86:FA:D3:31:13:2F:D2:2C:F0:D7:B0:E1
SHA-256
Calculating…
SHA-1
Calculating…
Public key SHA-256
Calculating…
CSRwww.example.com
Names (SANs)
  • www.example.com
  • example.com
  • *.api.example.com
Subject
C=US, ST=Texas, L=Austin, O=Example Inc, CN=www.example.com
Key
ECDSA P-256
Signature
ECDSA with SHA-256
Public key SHA-256
Calculating…

How to read your result

Whether the certificate is about to go on a server or has already broken HTTPS, you need the same few answers. If a row above looks wrong, here's the fix:

Row
What to do
Hostname
Reissue with the name added
Expires
Renew it, and find out why renewal didn't run
Chain
Install the full chain file
CSR
Find the right CSR, or reissue from the one you have
Lifetime
Private CA: nothing to fix. Public CA: ask them why it's over the limit

In the fields underneath, we'd check that the issuer is the CA you expected and the key is the type you asked for. You'll want the serial and fingerprints when you're comparing two copies or quoting one to your CA.

Does it cover your hostname?

Only the names in the Subject Alternative Name (SAN) list count. The common name looks like the answer, but RFC 9525 says it "MUST NOT be used to identify a service". Wildcards catch people too. One covers exactly one level of subdomain:

SAN entry
Covers
Doesn't cover
*.example.com
www.example.com, shop.example.com
example.com, a.b.example.com
example.com
example.com
www.example.com

Want a site and its subdomains? List both example.com and *.example.com.

Is your chain complete?

A server has to send its own certificate and the intermediates that link it to a root clients already hold. In TLS 1.3 the server certificate must come first, and each one after it should certify the one before.

[ What a server sends ]

www.example.com

Issuer: Example Issuing CA

↓

Example Issuing CA

Issuer: Example Root

fullchain.pem

↓

Example Root

Issuer: Example Root

Clients already have this

With Certbot, this comes down to one line of nginx config. Certbot writes the server certificate alone to cert.pem and the full set to fullchain.pem, and nginx's ssl_certificate needs fullchain.pem.

Here's our own site as an example. On Nov 4, 2026, americancloud.com sent three certificates. Paste only the first and the Chain row reads: "One certificate. Its issuer, WE1, isn't here. Serve this on its own and you've left out the intermediate." Paste all three and it reads "3 certificates line up", and notes that the last one's issuer, GlobalSign Root CA, isn't there. That's fine for a root.

Does this certificate match your CSR or key?

Paste the CSR under the certificate. If they share a public key, the certificate came from that CSR or another request using the same key.

Paste a CSR on its own and the Hostname row checks its names, so you can catch a missing one before your CA issues anything. You won't see an issuer or dates yet. Those come from the CA.

The tool won't read a private key, and you shouldn't paste one into any website. Compare it on your own machine: run this and match the result against the Public key SHA-256 row.

openssl pkey -in key.pem -pubout -outform der | openssl sha256

Certificate lifetimes keep shrinking

Public CAs follow a schedule from the CA/Browser Forum that cuts the longest certificate they can issue from 398 days to 47 by March 2029.

[ Longest public certificate ]
CA/Browser Forum Baseline Requirements, section 6.3.2.

Private CAs aren't on this schedule: Kubernetes control plane certificates last a year by default, for example. For anything a public CA signs, renewing by hand isn't a plan at 47 days, so automate it now.

Decoding a certificate isn't decrypting it

A certificate isn't encrypted, so there's nothing to decrypt. That block of text is binary data in Base64, and every server hands its certificate to anyone who connects. The secret is the private key, and it isn't in the certificate.

And "SSL" is a leftover name, this page's title included. RFC 7568 says "SSLv3 MUST NOT be used", and today these same certificates secure TLS connections.

Check a certificate with OpenSSL

The tool takes PEM text and PEM or DER files, not PFX. For a PFX, or if you'd rather stay in your terminal, these commands run on your own machine:

# Decode a certificate
openssl x509 -in cert.pem -noout -text

# Decode a CSR
openssl req -in request.csr -noout -text

# See what a server sends
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null

# Turn a binary DER file into PEM
openssl x509 -inform der -in cert.der -out cert.pem

# Pull the certificates out of a PFX
openssl pkcs12 -in file.pfx -nokeys -out cert.pem

When every row passes and the browser still complains

All this decoder knows is what you give it. Along the chain it compares names and key IDs, and it doesn't verify signatures. It doesn't check whether a browser trusts the root or whether the certificate was revoked, and it doesn't connect to your server. So "line up" means the chain reads correctly, not that a browser will accept it.

Next, check what's live. Run the s_client command above and paste all its output in here: now you're checking what your server really sends, not the file you think it's sending.

Run HTTPS on a server you control

On an American Cloud VM, HTTPS is Certbot and nginx: our Next.js deploy guide gets a Let's Encrypt certificate, reconfigures nginx for port 443 and turns on automatic renewal. Before you request one, check that your domain points at the server with our DNS lookup. Our load balancers do SSL termination, and we don't charge egress fees on any of it. And if something still looks wrong, ask a person: our support team's median reply time is under 2 minutes.

Contact us