An SSL/TLS check inspects the certificate chain a server actually presents, the protocol and cipher it negotiated, and the security headers that ride on top - three separate failure points that a padlock icon alone never shows.
What the certificate chain has to prove
A TLS handshake does not just confirm that a certificate exists - it has to confirm a chain of trust from the certificate the server presents up to a root CA the client already trusts. The server sends its own (leaf) certificate plus, ideally, any intermediate certificates needed to connect that leaf back to a root. Clients trust roots, not intermediates by name, and need those links to walk there.
A chain that stops one certificate short of a trusted root is the single most common real-world TLS misconfiguration: browsers that cache the missing intermediate from a previous visit connect fine, while clients without that cache fail outright. A site can "work" in one browser and throw a trust error in curl at the same time.
Each certificate in the chain carries its own validity window (RFC 5280 defines the X.509 fields: notBefore, notAfter, subject, issuer, subjectAltName), independently - a valid leaf chained to an expired intermediate is still a broken chain.
- Leaf (server) certificate → intermediate CA certificate(s) → root CA - the root itself is never sent by the server
- Subject Alternative Name (SAN), not the Common Name field, is what modern browsers actually check for hostname match (CN matching was deprecated by RFC 2818 back in 2000, and Chrome stopped falling back to it in 2017)
- A wildcard SAN like *.example.com covers one label of subdomain (mail.example.com) but not a second level (mail.uk.example.com)
- Certificate Transparency (RFC 6962) requires publicly trusted CAs to log every issued certificate to public, append-only logs - a certificate a browser cannot find in any CT log is treated as suspect
Reading the tool output
The result is organized around the actual handshake performed against port 443, not a cached grade. `certificateChain` lists every certificate returned, from the leaf outward, each with its `subject`, `issuer`, `validFrom`/`validTo` dates, `fingerprint`, key algorithm and size, and OCSP responder URLs. `chainInfo.complete` reports whether the last certificate is self-signed by a root or stops short (incomplete - the failure above).
`connectionInfo` reports what was actually negotiated: TLS `protocol` version, `cipher` name, and a breakdown (`cipherAnalysis`) of key exchange, authentication, encryption, and hash algorithm, including forward secrecy. Any deprecated protocol, weak cipher, or missing forward secrecy shows up in `connectionInfo.vulnerabilities`.
`securityHeaders` reports whether the server sent Strict-Transport-Security, Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy, with the HSTS `max-age`, `includeSubDomains`, and `preload` flags parsed out. `caaRecords` shows which CAs the domain's DNS permits to issue for it. `ocspStatus` reports whether OCSP responder URLs answered, and `certificateTransparency` whether the certificate's SCTs were found in public CT logs.
| Field | What it tells you | Why it matters |
|---|---|---|
| chainInfo.complete | Whether the chain reaches a self-signed root | false = missing intermediate, breaks clients without it cached |
| connectionInfo.protocol | Negotiated TLS version (e.g. TLSv1.3, TLSv1.2) | TLS 1.0/1.1 are deprecated; TLS 1.3 removes legacy cipher risk entirely |
| connectionInfo.cipherAnalysis.forwardSecrecy | Whether the key exchange is ephemeral (ECDHE/DHE) | Without it, a leaked private key retroactively decrypts past traffic |
| certificateChain[0].validity.daysUntilExpiry | Days left before the leaf certificate expires | Renewal automation failures are the top cause of surprise outages |
| securityHeaders.hsts.present | Whether HSTS is sent | Without it, a first plain-HTTP visit is vulnerable to downgrade |
Certificate expiry and renewal failure
A certificate is valid only inside the window between its `notBefore` and `notAfter` timestamps (RFC 5280), with no browser grace period - one expired a minute ago produces the same hard trust error as one expired a year ago. Public CAs cannot issue certificates with lifetimes above the CA/Browser Forum ceiling, which root programs enforce by refusing longer-lived certificates. That ceiling has been ratcheting down - 398 days for years, then 200 days from March 2026 under ballot SC-081, on a path toward 47 days by 2029. This is why automated renewal (ACME, RFC 8555, the protocol behind Let's Encrypt) replaced manual yearly renewal: a shrinking maximum lifetime makes any manual process an easy-to-miss chore.
Chain expiry compounds this: an intermediate CA certificate can expire while the leaf it signed is still within its own window, and vice versa. Rotating an intermediate can silently break sites which cached the old one - a renewal commonly swaps in a new leaf certificate correctly while leaving a mismatched intermediate bundle configured on the server.
Protocol, cipher suite, and forward secrecy
TLS versions are not interchangeable: SSLv2 and SSLv3 are broken protocols and should never be enabled. TLS 1.0 and 1.1 were formally deprecated by RFC 8996 in March 2021 and are blocked outright by current major browsers. TLS 1.2 remains safe with modern cipher suites; TLS 1.3 (RFC 8446) simplifies the handshake, drops static RSA key exchange and CBC-mode ciphers entirely, and is the current baseline.
A cipher suite bundles four choices: key exchange, authentication (how the server proves its identity), bulk encryption, and the hash/MAC used for integrity. ECDHE and DHE key exchanges are ephemeral - a fresh key is generated per session and discarded afterward, which is what forward secrecy means in practice: stealing the server's long-term private key later still does not decrypt traffic recorded today. Static RSA key exchange has no such property; a single compromised key makes every past session recorded under it readable. AEAD modes (AES-GCM, ChaCha20-Poly1305) combine encryption and integrity checking in one step and have largely replaced CBC-mode ciphers, which carry padding-oracle risk (the BEAST and Lucky 13 attack family) on older TLS versions.
Security headers that ride on top of TLS
A valid certificate only secures the transport; the response headers determine how much of that protection reaches the browser's handling of the page. HTTP Strict Transport Security (RFC 6797) tells the browser to refuse plain-HTTP connections for the `max-age` duration, closing the window where a first visit over HTTP could be intercepted before the redirect to HTTPS. `includeSubDomains` extends that to every subdomain, and `preload` bakes the domain into browsers' built-in HSTS list - difficult to reverse once set.
Content-Security-Policy restricts which sources a page may load scripts and other resources from - the primary defense against cross-site scripting exfiltrating data even after an attacker gets a script tag onto the page. X-Content-Type-Options: nosniff stops browsers guessing a different MIME type than declared. Referrer-Policy controls how much of the current URL leaks to third parties when a user follows a link out.
None of these headers affect the TLS handshake itself - a server can have a pristine certificate chain and ship none of them, which is why they appear as a separate section rather than folded into certificate validity.
FAQ
Why does my site work in Chrome but show a certificate error in curl or in another browser?
Almost always an incomplete certificate chain. Some browsers cache intermediate certificates already seen from other sites and silently fill the gap, while curl and less forgiving clients trust only what the server sends. The fix is serving the full chain (leaf plus intermediates) from the server configuration, not relying on client-side caching.
How long can a public SSL/TLS certificate be valid for?
The CA/Browser Forum maximum, which root certificate programs enforce by refusing longer-lived certificates. It dropped from 398 days to 200 days in March 2026 under ballot SC-081 and is scheduled to keep shrinking (down to 47 days by 2029). This is why automated renewal via the ACME protocol (RFC 8555) has largely replaced manual certificate renewal.
What does "forward secrecy" actually protect against?
It protects previously recorded encrypted traffic from later decryption if the server's long-term private key is ever compromised. ECDHE and DHE generate a fresh, temporary key per session; static RSA key exchange reuses the server's permanent key, so one key compromise can retroactively expose every session recorded under it.
Is TLS 1.2 still safe to use?
Yes, with modern AEAD cipher suites (AES-GCM or ChaCha20-Poly1305) and ECDHE key exchange. TLS 1.0 and 1.1 were formally deprecated by RFC 8996 in 2021 and are blocked by current browsers; TLS 1.2 remains supported everywhere and stays safe as long as legacy CBC-mode and static-RSA suites are disabled alongside it.
Does a valid certificate mean the site has good security headers too?
No. Certificate validity and HTTP security headers (HSTS, Content-Security-Policy, X-Frame-Options, and others) are configured independently - a server can present a flawless chain while sending none of them. Both need checking separately, which is why they appear as distinct sections in the results.
What is Certificate Transparency and why would a valid certificate fail it?
Certificate Transparency (RFC 6962) requires publicly trusted CAs to log every certificate to public, auditable logs. A certificate can be cryptographically valid and still fail CT checks if it was mis-issued outside the normal logging process, or if the server omits the log proof (SCTs).
Related tools
- Run a broader DNS health audit alongside the certificate and header check for a full picture of the domain's configuration
- Inspect the CAA records directly to see which certificate authorities are authorized to issue for this domain
- Look up any other DNS record type for the same domain, including the A/AAAA records TLS certificates ultimately protect
- Check whether a recently reissued certificate's DNS-based validation records have propagated across resolvers