What this tool does
An X.509 certificate is a signed structure encoded in DER, a binary form of ASN.1, and is usually shared as PEM: the same bytes in Base64 between -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- lines. The decoder finds every PEM block in the input (or reads Base64, hex or binary DER), parses the ASN.1 with every length checked, and shows the version, serial number, signature algorithm, the issuer and subject names as RFC 4514 strings and attribute tables, the validity period in UTC with the days remaining, and the public key: RSA modulus size and exponent, the EC curve such as P-256, or Ed25519. Extensions are listed with their critical flag, including SANs, basic constraints, key usage, extended key usage, key identifiers, CRL and OCSP locations, certificate policies (DV, OV, EV) and the number of Certificate Transparency SCTs; anything it does not recognise is shown as an OID and hex. For a chain it checks each certificate's issuer against the next one's subject and key identifier, and the hostname box applies browser matching rules to the SANs. It does not verify signatures or check revocation.
Example input and output
-----BEGIN CERTIFICATE-----
MIICWTCCAf6gAwIBAgIBKjAKBggqhkjOPQQDAjBwMRMwEQYKCZImiZPyLGQBGRYD
Y29tMRcwFQYKCZImiZPyLGQBGRYHZXhhbXBsZTEUMBIGA1UECgwLRXhhbXBsZSBP
cHMxGDAWBgNVBAMMD2FwaS5leGFtcGxlLmNvbTEQMA4GA1UEBRMHRVgtMDA0MjAe
Fw0yNjAzMDEwMDAwMDBaFw0yNjA5MDEwMDAwMDBaMHAxEzARBgoJkiaJk/IsZAEZ
FgNjb20xFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMRQwEgYDVQQKDAtFeGFtcGxl
IE9wczEYMBYGA1UEAwwPYXBpLmV4YW1wbGUuY29tMRAwDgYDVQQFEwdFWC0wMDQy
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4fZgUCm+dZgMegBPTCr1LaUa7JtN
Tb7wzNI/h8I6GjFk83a1b9logq2nrDU8SLstG8VHtoBJj0imgH61oQGfN6OBiDCB
hTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD
ATA0BgNVHREELTArgg9hcGkuZXhhbXBsZS5jb22CEmFwaS1ldS5leGFtcGxlLmNv
bYcExjNkBzAdBgNVHQ4EFgQUMHtS1aJVqB5pkXU52T5gzkHZQ1swCgYIKoZIzj0E
AwIDSQAwRgIhAOaQ4ahrO3BAHX553Nb7AGvflKcdFj6rOcb5jaBBFW0HAiEA1Xf1
rmNNsG/AUGUqPiZcdjqTvP/m8Gw9tNf8b6feFcs=
-----END CERTIFICATE-----Subject serialNumber=EX-0042,CN=api.example.com,O=Example Ops,DC=example,DC=com
Issuer serialNumber=EX-0042,CN=api.example.com,O=Example Ops,DC=example,DC=com
Type Self-signed (issuer = subject)
SANs DNS:api.example.com, DNS:api-eu.example.com, IP:198.51.100.7
Validity 2026-03-01 00:00:00 UTC → 2026-09-01 00:00:00 UTC
Status expired 59 days ago (on 2026-10-30)
Public key EC P-256
Signature ecdsa-with-SHA256
Serial 2a (42)
Key usage Digital Signature (critical)
EKU serverAuth
SHA-256 CF:D8:5C:94:55:74:FF:8A:EF:85:13:CA:70:30:41:8B:E6:A3:2C:5C:89:D0:D2:A1:CD:E1:AE:86:E9:6D:DB:9AThe fingerprint matches openssl x509 -noout -fingerprint -sha256. The status is worked out from your computer's clock each time you decode.
-----BEGIN CERTIFICATE-----
MIIG+zCCBeOgAwIBAgIRAMD/7gEjRWeJq83vABEiM0QwDQYJ… (www.example.com)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEbzCCAtegAwIBAgICEAAwDQYJKoZIhvcNAQEMBQAwRzEL… (DevPrix Test Root CA)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFYzCCA8ugAwIBAgIUfSo8S15vcIGSo7TF1uf4CRorPE0w… (DevPrix Test Intermediate CA R1)
-----END CERTIFICATE-----Chain: Out of order
#1 www.example.com (Leaf)
↳ issuer (CN=DevPrix Test Intermediate CA R1,O=DevPrix Test PKI,C=US) is not #2’s subject
#2 DevPrix Test Root CA (Root CA)
↳ issuer (CN=DevPrix Test Root CA,O=DevPrix Test PKI,C=US) is not #3’s subject
#3 DevPrix Test Intermediate CA R1 (Intermediate CA)
A working order is #1 → #3 → #2: leaf first, then each issuer.The Base64 bodies are shortened here. Only names and key identifiers are compared; signatures are not checked.
-----BEGIN CERTIFICATE REQUEST-----
MIIDHjCCAgYCAQAwajELMAkGA1UEBhMCR0IxEDAOBgNVBAgMB0VuZ2xhbmQxEzAR
BgNVBAcMCk1hbmNoZXN0ZXIxGTAXBgNVBAoMEEV4YW1wbGUgU2hvcCBMdGQxGTAX
BgNVBAMMEHNob3AuZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQC6B0FEAhj/wyVQvBVYkA92SfFRa+LM9H62qx7qx3+ecnQhEJnc6AYF
DGCmnk/1XykbtD+1ICPXikh4uJuP0vpvjrESKM3mJthKOepHMPxzmZaZEvtToyN+
deLscYKnW70m9YtG8wxxxJ/0jACef7046XAQ9W8jw1WsmYHOchtOlqkc+848uwoM
jChfLmVR/eyqh3A1ckN/7b+KpcbhCQPx6CjiJpiRueUoUVaSwFoqfd0BKteR9W7g
zUGy5bJXtySWITP1ugjOJ6jBKLIkp3DdPWfGWiOvmnWmLxI9KDqi1d5KjEiWByWs
LrRW6ZoyjK3faMi8C9XkY4vOfKU4xzg3AgMBAAGgbzBtBgkqhkiG9w0BCQ4xYDBe
MDcGA1UdEQQwMC6CEHNob3AuZXhhbXBsZS5jb22CFHd3dy5zaG9wLmV4YW1wbGUu
Y29thwTLAHEFMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAN
BgkqhkiG9w0BAQsFAAOCAQEAh9iOqrI6Tz6f86dnDC8UFBmUVBwpMm0KECGt3l7V
3UIEPgkngiuqD+cqpFwiFaHZVTBmGjsvUztc6VBsonY67F7ztakdegK6JRcWLpPU
IjCgI1dOCteHTzJqLGFyT+SGKOfBNPTNLHh6Vht2GBSD7Xck11KHiPUtwD4vSH4D
SVIEjFurXkRH88G0ke4sYRY/lL6myJoi8BtcZTG0AttA5oWXeuJ2iUAVRA9q1RSP
xFeRO/kymikA9he+TmoitQg+y+Go2xxAyS4cKOYWi2dFXZpBhNIdVdneaG5he4wf
mCfMY6i6KmGosaGeUnRE30gzA0bT3LdY7xVG1jiTSHMD9Q==
-----END CERTIFICATE REQUEST-----
Hostname: api.shop.example.comSubject CN=shop.example.com,O=Example Shop Ltd,L=Manchester,ST=England,C=GB
Requested SANs DNS:shop.example.com, DNS:www.shop.example.com, IP:203.0.113.5
Public key RSA 2048-bit, e=65537
Signature sha256WithRSAEncryption
Key usage Digital Signature, Key Encipherment (critical)
Extended usage TLS Web Server Authentication
api.shop.example.com: Not covered. Its DNS names are: shop.example.com, www.shop.example.com.Check the requested SANs before you send a CSR to a CA: the certificate will only cover the names listed here.
Common errors and fixes
- Private key detected
- The input contains a private key block, often because a server's combined .pem holds the key and the certificates together. DevPrix skips the key and decodes only the certificates. Copy just the CERTIFICATE blocks next time, and never paste keys into websites.
- No certificate found, or Malformed DER (DER vs PEM)
- A .cer or .der file may be binary DER rather than PEM text, and pasting it as text corrupts it. Use Open file to read it directly, or convert it with openssl x509 -inform der -in cert.der -out cert.pem. A .p7b file is PKCS#7: extract its certificates with openssl pkcs7 -print_certs -in bundle.p7b.
- The block has no -----END CERTIFICATE----- line, or the data looks truncated
- Part of the Base64 was lost when copying. Copy the whole block again, including the BEGIN and END lines. A message such as “says it is 1787 bytes long, but only 908 bytes are left” means the same thing.
- Chain out of order
- Each certificate must be followed by the one that issued it: the leaf first, then the intermediates, with the root optional. Reorder the blocks in your chain file (fullchain.pem, or the file Nginx's ssl_certificate points to) as DevPrix suggests.
- NET::ERR_CERT_COMMON_NAME_INVALID: the hostname is not in the SANs
- Browsers only check the subjectAltName entries and ignore the Common Name (CN). Reissue the certificate with every hostname in the SANs. A wildcard *.example.com covers api.example.com, but not example.com itself or a.b.example.com.
- The certificate is valid, but clients say it has expired
- Another certificate in the chain may have expired, often an old intermediate the server still sends. Paste the full chain, look for an expired intermediate, and replace it with the CA's current one.
- unable to get local issuer certificate
- The client could not build a chain to a trusted root, usually because the server sends only the leaf. Add the intermediate certificate after the leaf in your chain file. The CA Issuers URL in the summary shows where the CA publishes it.
Common use cases
- Checking when an SSL certificate expires and how many days are left
- Confirming which hostnames (SANs) a certificate covers before you deploy it
- Debugging TLS errors such as a hostname mismatch or a missing intermediate
- Checking that a fullchain.pem is in the right order
- Reviewing a CSR before you send it to a certificate authority
- Getting a certificate's SHA-256 fingerprint for pinning or an allow list
Privacy and security notes
- Certificates are public: every HTTPS server sends its certificate to anyone who connects, and Certificate Transparency logs publish them. DevPrix still decodes them locally, in this tab, and uploads nothing.
- Private keys are secret. DevPrix never decodes or shows a private key block, leaves it out of Share links, and warns you so you can remove it. Treat a key that has been pasted into other websites, chats or tickets as exposed and replace it.
- This tool makes no network requests: it does not fetch certificates from servers, or contact CRL and OCSP URLs. To get a site's certificate, use the openssl command in the FAQ.
Frequently asked questions
What is the difference between PEM, DER, CRT and CER?
DER is the binary encoding of a certificate. PEM is the same bytes in Base64 between BEGIN and END lines, so it can be pasted as text, and one PEM file can hold a whole chain. .crt and .cer are only file extensions and can hold either; .pem usually means PEM and .der means DER. DevPrix reads all of them.
Why do browsers ignore the Common Name (CN)?
Hostnames belong in the subjectAltName extension, and the CA/Browser Forum rules require every name a certificate covers to be listed there. Chrome stopped falling back to the CN in 2017 and other browsers did the same, so a certificate whose CN matches but whose SANs do not fails with a name-mismatch error.
How do I get a website's certificate?
Run openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null and paste the output here; DevPrix ignores everything except the PEM blocks. -servername sends SNI so you get the right certificate on a shared host, and -showcerts includes the intermediates the server sends.
Does it verify the certificate chain?
No. It checks that each certificate's issuer name and authority key identifier match the next certificate's subject, which catches a wrong order or a missing intermediate, but it does not check signatures, revocation or whether the root is trusted. Use openssl verify -untrusted intermediate.pem leaf.pem, or a browser, for that.
What are SCTs?
Signed Certificate Timestamps are receipts from Certificate Transparency logs showing that the certificate was publicly logged. Chrome and Safari require them for publicly trusted TLS certificates, usually two or three embedded in the certificate. DevPrix counts them and lists each log ID and timestamp in the JSON view, but does not verify the log signatures.