TLS check
@@domain@@
- Result
- @@result@@
- Reason
- @@reason@@
- Domain (RDAP)
- @@registration@@
A failed check says nothing about the certificate. Nothing here counts as expired.
Free tool
See when a site’s certificate expires, who issued it, and whether browsers trust it. Free, no account.
@@label@@ @@label@@ @@label@@ @@label@@
TLS check
@@domain@@
A failed check says nothing about the certificate. Nothing here counts as expired.
TLS check
@@domain@@
First email if watched @@nextAlert@@
TLS check
@@domain@@
First email if watched @@nextAlert@@
TLS check
@@domain@@
First email if watched @@nextAlert@@
Your browser didn’t let this page copy. Select the text and copy it yourself.
| Address | What it served |
|---|
From February 10, 2027, Let’s Encrypt issues 64-day certificates by default. What to check before then
See every certificate in the chain Registration details for @@registered@@
On any machine with OpenSSL, this prints the expiry date (notAfter) of the certificate a server sends:
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
| openssl x509 -noout -enddate
The -servername flag matters: servers that host several sites pick the certificate by that name. More ways, including
curl and the browser, are in how to check SSL certificate expiry.
certbot renew --dry-run
shows whether it would succeed. Common failures: DNS moved, port 80 blocked for the HTTP challenge, or expired API credentials for
the DNS challenge.
Public TLS certificates are getting shorter. Since March 15, 2026, they can last at most 200 days; from March 15, 2027, 100 days; and from March 15, 2029, 47 days. Each step means more renewals, and more chances for one to fail quietly. Details are in 47-day SSL certificates: timeline and prep.
Let’s Encrypt also stopped sending expiry reminder emails on June 4, 2025, so a broken renewal no longer produces a warning in your inbox unless you set one up.
We resolve the domain and connect to port 443 on each of its addresses from our checker, up to 4 IPv4 and 4 IPv6, completing a TLS handshake using the domain name, the way a browser would. We read the certificates each server sends, then disconnect. We don’t load the page, send any data or follow redirects.
The details at the top describe the certificate that expires soonest among the valid ones, since some visitors get it; the address list shows the rest. A CDN with regional edges can still serve different certificates in places our checker doesn’t reach, since we look from one place, and a load balancer behind one address answers with one of its servers, so a bad one may not show on a given day.
Something else? Send us a note, right from the page.
Yes. Check as many domains as you like, with no account. Monitoring with email alerts is free for up to 10 domains.
No. The check reads the certificate and its chain: dates, issuer, trust and names. It doesn’t scan for vulnerabilities or judge your server’s configuration beyond the TLS version it agreed to use.
Both. Chrome fetches a missing intermediate certificate by itself, and Firefox ships a list of known intermediates, so they cover for the server.
Most other clients don’t: curl, scripts, payment and webhook senders, many apps and monitoring tools. They fail until the server sends the full chain.
Our checker uses the root certificates bundled with Node.js, which come from Mozilla’s root store, the same list Firefox and many Linux systems use. A private or company root is reported as untrusted.
Unavailable means our checker didn’t answer in time; the registration details still show. Failed means we couldn’t complete a TLS connection: no DNS record, nothing listening on port 443, a firewall, or a server that doesn’t speak TLS.
Neither is a verdict on the certificate. We never show a failed check as expired.
Many sites answer on several IP addresses: a load balancer, several servers, or a CDN. We check each one, up to 4 IPv4 and 4 IPv6 addresses, the same ones every time, and the result lists what each served. Private or reserved addresses are never contacted.
If our checker can’t reach IPv6, those addresses show as not checked. That’s on our side, never counted against the site.
One address can also hide several servers behind a load balancer, and we see whichever answers us, so a bad server behind it may not show on a given day.
Some certificate authorities publish when they suggest renewing the certificates they issue: ACME Renewal Information, or ARI (RFC 9773). ACME clients that read it renew within that window. For certificates from Let’s Encrypt, Google Trust Services, ZeroSSL and Sectigo, the result shows the window, asked from the CA with each check.
A CA moves a certificate’s window earlier when it wants it replaced sooner, often ahead of a revocation. When a window has already started well before the point the same CA usually suggests for a certificate of that lifetime, the result flags it, for certificates of 90 days or more. It is what the CA publishes, not a verdict on the certificate.
No. The checker connects only to public domain names on port 443, and refuses addresses in private, internal or reserved ranges.
We don’t keep a history of your checks or tie them to you. Registry answers are reused for up to 12 hours so repeat lookups are quick, then deleted within a week, and like any web service our request logs are kept for a few days.
Expiry Watch checks the domain every day and emails you if the certificate’s renewal looks late, or before the certificate or the registration runs out.