sysop@hub:~/tools/certificate-decoder$
certificate-decoder
Paste a certificate, or the whole chain your server sends, and read it like a sentence: who it is for, who issued it, how long it lasts, and why a client might refuse it. The page checks the order of the chain and the signatures between the certificates. Everything is decoded by your browser, nothing is uploaded.
getting the certificate
| From | How |
|---|---|
| A running server, everything it sends | openssl s_client -connect www.example.org:443 -servername www.example.org -showcerts </dev/nullCopy all blocks from BEGIN CERTIFICATE to END CERTIFICATE. |
| A mail server with STARTTLS | openssl s_client -connect mail.example.org:587 -starttls smtp -showcerts </dev/null |
| The browser | Click the padlock, open the certificate, tab Details, Export. Choose the format with the chain if it is offered. |
| Windows certificate store | certlm.msc, right-click the certificate, All Tasks, Export, Base-64 encoded X.509. Do not export the private key. |
| A .pfx or .p12 file | openssl pkcs12 -in file.pfx -nokeys -out certs.pemThe switch -nokeys leaves the private key out. |
| A file on a Linux server | Usually below /etc/ssl, /etc/letsencrypt/live or /etc/pki. Drop fullchain.pem here, never privkey.pem. |
what it checks
| Check | Triggers when | Severity |
|---|---|---|
| Validity | Expired, not valid yet, or fewer than 30 days left. | critical to medium |
| Host name | The name you entered is not covered by the subject alternative names, with the wildcard rule applied. | critical |
| Signatures in the chain | A certificate was not signed by the key of the next one. Checked with your browser's own cryptography for RSA and ECDSA. | critical |
| Chain order | The certificates are not in the order leaf, intermediate, root. | high |
| Names | A server certificate has no subject alternative names. | high |
| Weak cryptography | SHA-1 or MD5 signature, RSA key below 2048 bit. | high |
| Purpose | Self-signed, or not issued for server authentication. | medium |
| Chain contents | Certificates that do not belong, an expired CA certificate, only the leaf, the root included. | critical to info |
| Lifetime | Runs longer than public certificate authorities may issue. | info |
| Private key | The pasted text contains a private key. It is skipped and never read. | critical |
error messages and what they mean
| Message | Usual cause |
|---|---|
| unable to get local issuer certificate unable to verify the first certificate | The server does not send the intermediate certificate. Browsers often fetch it themselves, curl, Java and Python do not. |
| certificate has expired | The leaf or an intermediate is past its date, or the server still serves the old file after a renewal because it was not reloaded. |
| NET::ERR_CERT_COMMON_NAME_INVALID hostname mismatch | The name in the address bar is not in the subject alternative names. Common with a missing www, an internal short name or an IP address. |
| NET::ERR_CERT_AUTHORITY_INVALID self-signed certificate in certificate chain | The root is not in the trust store of the client: an internal CA that was never rolled out, or a TLS-inspecting proxy. |
| certificate is not yet valid | The clock of the client is wrong. Look at the date of the machine before you look at the certificate. |
| PKIX path building failed | Java does not trust the root or lacks the intermediate. Java has its own trust store (cacerts), separate from the operating system. |
| The revocation function was unable to check revocation | Windows could not reach the CRL or OCSP address in the certificate, often because of a firewall or an internal CA whose list is not published. |
The page reads what is in the certificate. It cannot tell whether a certificate has been revoked, whether your clients trust the root, or what a server sends right now: for a live check of a domain use the domain check. RSA-PSS and Ed25519 signatures are shown but not verified. Related: the certificate chain explained, OpenSSL cheat sheet, certificate authentication cheat sheet.