SSL Checker
Check any site's SSL certificate online: valid or not, the expiry date, the chain of trust in every browser, revocation, TLS versions and ciphers. Graded A+ to F in seconds, for websites and mail servers.
What this SSL checker tests
An SSL checker connects to a server the way a browser does and reads the certificate it presents. This one speaks TLS itself, so it sees exactly what the server sends: the certificate and its chain, the protocol version, the cipher suite and the key exchange. Sites behind Cloudflare refuse our connection, so for them the certificate comes from the CT log and the protocol scan and grade are skipped; IPv6-only servers can't be reached yet. Then it checks the chain against the four root stores browsers and operating systems use, asks the CA whether the certificate was revoked, and scans which older protocols and weak ciphers the server still accepts.
The result works as an SSL test, an HTTPS checker and a TLS checker in one: a verdict in plain words, an A+ to F grade with its reasons, and the details behind it. It also checks what sits around the certificate: the HSTS header, the HTTP to HTTPS redirect, CAA records and the Certificate Transparency log.

The verdictValid or not in one sentence, the days left, the issuer, and the grade with its reasons.The lifetimeWhere the certificate is in its life: issued, today, expiry, against the maximum for its issue date.The chain of trustEvery certificate from the site to the root, how we got each one, and the four root stores' verdicts.The checksHostname, chain, trust, revocation, protocols, key exchange, HSTS and CAA, each with a fix when it fails.How to check an SSL certificate
Three ways, from the quickest to the most detailed:
- 1
With this SSL certificate checker
Type the domain (or a URL, or host:port for another service) and select Check SSL. The certificate and its chain arrive first, then revocation, the protocol scan and HSTS fill in, and the verdict and grade come last.
- 2
In the browser
Select the icon to the left of the address, then Connection is secure and Certificate is valid (Chrome) or More information (Firefox). You see the names, the issuer and the dates, but not the chain as the server sent it, the protocols it allows, or whether it was revoked: Chrome doesn't check most revocations online.
- 3
With openssl
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/nullprints the chain the server sends; pipe it toopenssl x509 -noout -datesfor the expiry date. The commands are below and in the result's Chain view.
How to check when an SSL certificate expires
Check the domain above: the result says how many days are left and shows the certificate's whole lifetime, from the day it was issued to the day it expires. The Valid to date is the certificate's notAfter field; after that moment every browser shows a full-page warning (NET::ERR_CERT_DATE_INVALID in Chrome).
From a terminal, echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate prints the same date, and -checkend 2592000 tells a script whether it expires within 30 days. The History view can download a calendar reminder for any date before expiry, without an account. If you only have the certificate file, paste it into the certificate decoder to read its dates and every other field without connecting to the server.
Let's Encrypt stopped sending expiry emails in June 2025, and certificates are getting shorter, so renewals should be automatic: renew at about two-thirds of the lifetime (60 days into a 90-day certificate), or let the CA say when through ACME Renewal Information (RFC 9773).
Certificate lifetime · example-shop.com
$ echo | openssl s_client -connect example-shop.com:443 -servername example-shop.com 2>/dev/null | openssl x509 -noout -enddate
notAfter=Nov 30 07:11:59 2026 GMT
$ echo | openssl s_client -connect example-shop.com:443 -servername example-shop.com 2>/dev/null | openssl x509 -noout -checkend 2592000
Certificate will not expireWhy are SSL certificates getting shorter?
Because browsers and CAs voted for it. CA/Browser Forum ballot SC-081 (April 2025) cuts the longest a public TLS certificate may be valid in three steps, so a leaked key or an out-of-date identity stops working sooner:
Validations shrink with them: a CA may reuse a completed domain validation for 200 days now, 100 days from 2027 and only 10 days from March 2029, so the domain is proved again almost every time.
Let's Encrypt goes further on its own schedule: its 90-day certificates become 64-day certificates on 10 February 2027 and 45-day certificates on 16 February 2028, and six-day certificates are available today. A certificate this checker shows as longer than the maximum for its issue date breaks the rules (Chrome rejects it).
- Since 2020398 days
- 15 March 2026200 days
- 15 March 2027100 days
- 15 March 202947 days
Manual renewal once a year stopped working on 15 March 2026. Use an ACME client (Certbot, Caddy, your host's AutoSSL) and check that renewals actually happen.
SSL chain checker: leaf, intermediate and root
A browser trusts a site's certificate because a chain of signatures leads from it to a root certificate in its root store. The server must send its own certificate and the intermediates; the root is already on the device. This chain checker shows the chain twice: as the server sent it, and as browsers build it, with the root each store trusts.
The most common mistake is a missing intermediate: the server sends only its own certificate. Chrome can usually fetch the missing one from the address in the certificate (AIA), and Firefox preloads the intermediates CAs disclose to the CCADB, so the site looks fine in a browser. Apps, API clients, curl and other tools often don't, and fail with errors such as unable to get local issuer certificate.
- Leaf (the site's certificate)
- Names the site in its Subject Alternative Names and holds the server's public key. Valid for 200 days at most if issued since 15 March 2026.
- Intermediate
- Signed by the root and signs the site's certificate, so the root's key can stay offline. The server must send it.
- Root
- Self-signed and trusted because the browser or operating system ships it in its root store. Sending it is allowed but useless.
Fix an incomplete chain
- 1
Install the full chain file your CA gave you (often called fullchain.pem or ca-bundle), not the certificate alone. The result's Chain view can download the right bundle.
- 2
nginx:
ssl_certificatemust point to the certificate followed by the intermediates in one file. - 3
Apache 2.4.8+: put the intermediates in the
SSLCertificateFileafter the certificate (older versions useSSLCertificateChainFile). - 4
Check again: the chain should end at a root in all four stores with no certificate marked fetched by us.
Chain of trust
- Site certificateexample-shop.comLet's Encrypt · DV · RSA 2048sent by the server
- IntermediateR13RSA 2048 · until Mar 2027sent by the server
- RootISRG Root X1until Jun 2035from the root stores
- Root storesTrusted everywhere
Common SSL certificate errors and how to fix them
What the browser's warning means, and what the checker shows for it:
NET::ERR_CERT_DATE_INVALID
SEC_ERROR_EXPIRED_CERTIFICATE / MOZILLA_PKIX_ERROR_NOT_YET_VALID_CERTIFICATE
The certificate has expired (or isn't valid yet), or the device's clock is wrong.
Renew it and install the new certificate, then make renewal automatic. The checker's lifetime ruler shows the dates.
NET::ERR_CERT_AUTHORITY_INVALID
SEC_ERROR_UNKNOWN_ISSUER / MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
The chain doesn't lead to a trusted root: a self-signed or private-CA certificate, or a missing intermediate.
Install a certificate from a public CA with its full chain. The chain of trust shows where it breaks.
NET::ERR_CERT_COMMON_NAME_INVALID
SSL_ERROR_BAD_CERT_DOMAIN
The certificate doesn't name the site you opened. A wildcard covers only one level: *.example.com is not example.com or a.b.example.com.
Issue a certificate that lists every name the site answers on, www included.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
SSL_ERROR_NO_CYPHER_OVERLAP / SSL_ERROR_UNSUPPORTED_VERSION
The browser and the server share no protocol version or cipher suite, usually a server that offers only TLS 1.0 or old ciphers.
Enable TLS 1.2 and TLS 1.3 with AEAD ciphers. The Protocols view lists what the server accepts.
Which TLS versions should a server support?
TLS 1.3 and TLS 1.2, nothing older. TLS 1.0 and 1.1 have been formally deprecated since March 2021 (RFC 8996) and every current browser refuses them; SSL 3.0 is broken. TLS 1.3, now RFC 9846, is faster (one round trip) and keeps only AEAD ciphers with forward secrecy.
The key exchange is the part to watch next. Chrome, Firefox and Apple's systems now offer X25519MLKEM768, a hybrid of X25519 and the post-quantum ML-KEM (FIPS 203), standardised for TLS in RFC 10024, so traffic recorded today can't be decrypted by a future quantum computer. More than half of human traffic through Cloudflare used it by late 2025, but few origin servers accept it yet. The Protocols view shows whether yours does.
How the SSL grade works
The grade is modelled on Qualys SSL Labs' rating guide: a problem a browser shows as an error decides the letter first, then each weaker setting caps the best letter possible.
| Grade | What it takes |
|---|---|
| A+ | A clean A, TLS 1.3, and HSTS kept at least six months. |
| A | Trusted, TLS 1.2 and 1.3 only, forward secrecy and AEAD ciphers. Mail servers top out here (HSTS is for websites). |
| A- | No TLS 1.3, or a website without a valid HSTS header. |
| B | TLS 1.0, TLS 1.1 or RC4 still accepted, a key below 2048 bits, no forward secrecy or AEAD, or an incomplete chain. |
| C | SSL 3.0 on, 3DES or RC4 still chosen for modern clients, or neither TLS 1.2 nor 1.3. |
| F | Expired, revoked, export-grade ciphers, RC4 only, or SSL 3.0 as the best protocol. |
| T / M | Not trusted (T) or issued for another name (M): browsers show a warning whatever the setup. The letter it would earn once fixed is shown too. |
HSTS, CAA, OCSP and the rest of the setup
HSTS
The
Strict-Transport-Securityheader tells browsers to use only HTTPS for max-age seconds. With a year or more, includeSubDomains and preload, a site can join the HSTS preload list built into browsers. The result reads the header and the list.HTTP to HTTPS
http:// should redirect to https:// on the same name before anything else, or the first visit stays unencrypted.
CAA records
A CAA record in DNS names the CAs allowed to issue for the domain; every public CA must check it. The result shows the record and whether it allows the CA that issued the current certificate, so a renewal won't fail.
Revocation
Since 2024 CRLs are required and OCSP optional, and Let's Encrypt shut its OCSP service in August 2025. A certificate without an OCSP address is normal: the checker reads the CRL instead.
Check an SSL certificate with OpenSSL
The openssl commands for the same checks, on macOS, Linux and Windows (with OpenSSL installed). Put your host in place of example.com:
| To check | Command |
|---|---|
| The chain the server sends | openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null |
| The expiry date | echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates |
| Expires within 30 days? | echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -checkend 2592000 |
| Names, issuer and key | echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -text |
| TLS 1.3 accepted? | openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null |
| A mail server (STARTTLS) | openssl s_client -connect mail.example.com:587 -starttls smtp -servername mail.example.com </dev/null |
SSL checker API
A free endpoint with CORS: POST {"domain": "example.com"} to /api/ssl-certificate for the fields of our older API, now with true trust, signature and version values plus the grade, the store verdicts and revocation. 30 checks a minute per network; a repeat within ten minutes comes from cache.
$ curl -X POST https://dnsrobot.net/api/ssl-certificate \
-H "Content-Type: application/json" -d '{"domain": "github.com"}'
{
"success": true, "domain": "github.com",
"leafCertificate": { "daysToExpire": 39, "isValid": true, … },
"trustStatus": { "isTrusted": true, "hasValidChain": true, … },
"v2": { "state": "valid", "grade": "A+",
"stores": { "mozilla": true, "chrome": true, … }, … }
}SSL Checker FAQ
How do I check if a website's SSL certificate is valid?
How do I check when an SSL certificate expires?
openssl x509 -noout -enddate on the server's certificate prints the date. Public certificates issued since 15 March 2026 last at most 200 days, so renewal should be automatic; the History view also downloads a calendar reminder.Can I get an alert before an SSL certificate expires?
What does an SSL test check?
What is an intermediate certificate, and why is my chain incomplete?
Why does my site work in Chrome but fail in apps or other browsers?
How long is an SSL certificate valid in 2026?
What do the SSL grades A+, A, B, T and M mean?
Can I check the SSL certificate of a mail server or another port?
How do I know if an SSL certificate has been revoked?
Is my website quantum-safe?
What is the difference between SSL and TLS?
Is this SSL checker free, and do you keep what I check?
Missing something?Suggest a feature or a new tool
More security and DNS tools
Certificate Decoder
Decode an SSL certificate or a whole chain: every field, each link checked, trust in the 4 browser root stores, PEM and DER
SSL Converter
Convert PFX to PEM, PEM to PFX, P7B, DER, CRT and CER: the files your server needs, in order, and your private key never leaves your browser
CAA Record Checker
See which certificate authorities may issue for a domain, read the way a CA reads CAA, against the certificates in use; then generate a correct set
CSR & Certificate Decoder
Decode a CSR or SSL certificate: subject, SANs, key size, validity, issuer, fingerprint, signature check and CSR-to-certificate match
CSR Generator
Create a certificate signing request and private key in your browser: RSA or ECDSA, with SANs and the matching OpenSSL command
HTTP Header Checker
Response headers exactly as sent, with a Mozilla Observatory security grade