admin_hub

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

FromHow
A running server, everything it sendsopenssl s_client -connect www.example.org:443 -servername www.example.org -showcerts </dev/null
Copy all blocks from BEGIN CERTIFICATE to END CERTIFICATE.
A mail server with STARTTLSopenssl s_client -connect mail.example.org:587 -starttls smtp -showcerts </dev/null
The browserClick the padlock, open the certificate, tab Details, Export. Choose the format with the chain if it is offered.
Windows certificate storecertlm.msc, right-click the certificate, All Tasks, Export, Base-64 encoded X.509. Do not export the private key.
A .pfx or .p12 fileopenssl pkcs12 -in file.pfx -nokeys -out certs.pem
The switch -nokeys leaves the private key out.
A file on a Linux serverUsually below /etc/ssl, /etc/letsencrypt/live or /etc/pki. Drop fullchain.pem here, never privkey.pem.

what it checks

CheckTriggers whenSeverity
ValidityExpired, not valid yet, or fewer than 30 days left.critical to medium
Host nameThe name you entered is not covered by the subject alternative names, with the wildcard rule applied.critical
Signatures in the chainA certificate was not signed by the key of the next one. Checked with your browser's own cryptography for RSA and ECDSA.critical
Chain orderThe certificates are not in the order leaf, intermediate, root.high
NamesA server certificate has no subject alternative names.high
Weak cryptographySHA-1 or MD5 signature, RSA key below 2048 bit.high
PurposeSelf-signed, or not issued for server authentication.medium
Chain contentsCertificates that do not belong, an expired CA certificate, only the leaf, the root included.critical to info
LifetimeRuns longer than public certificate authorities may issue.info
Private keyThe pasted text contains a private key. It is skipped and never read.critical

error messages and what they mean

MessageUsual 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 expiredThe 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 validThe clock of the client is wrong. Look at the date of the machine before you look at the certificate.
PKIX path building failedJava 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 revocationWindows 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.