What it means: By your device's clock, the site's certificate has expired or is not valid yet.
Free online tool — SSL certificate checker: instant results, no signup.
Runs a full TLS check: handshake, protocol versions, certificate chain, trust and expiry.
Every certificate carries a notBefore and a notAfter date. Chrome compares them, for the leaf and for the intermediates in the chain it builds, with the clock of the device running the browser. If the current time is outside that window, it reports NET::ERR_CERT_DATE_INVALID (net error -201). The comment in Chromium's net_error_list.h lists three explanations: an attacker presenting an old certificate whose key they obtained, a misconfigured server, or "Our clock is wrong."
Only the visitor's clock matters; the server's clock plays no part in this check. The error is also not about trust or names. Those outrank dates in Chrome, so an expired certificate that is also self-signed shows ERR_CERT_AUTHORITY_INVALID, and one issued for another hostname shows ERR_CERT_COMMON_NAME_INVALID.
| Browser | What you see | Most common trigger |
|---|---|---|
| Chrome | "Your connection is not private" with NET::ERR_CERT_DATE_INVALID, or "Your clock is behind" / "Your clock is ahead" | Missed renewal; wrong device clock |
| Edge | "Your connection isn't private", same code | Same as Chrome |
| Firefox | SEC_ERROR_EXPIRED_CERTIFICATE, MOZILLA_PKIX_ERROR_NOT_YET_VALID_CERTIFICATE, SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE, or "Your Computer Clock is Wrong" | Expired leaf, brand-new certificate on a slow clock, expired intermediate |
| Safari | "This Connection Is Not Private"; the certificate details show the dates | Same conditions |
Server side. Renewal never ran (disabled certbot timer, an ACME HTTP-01 challenge blocked by a firewall or a redirect, expired DNS API credentials for DNS-01). Or renewal succeeded but nothing reloaded the server: nginx, Apache and HAProxy keep the old certificate in memory until a reload, and Java or Node apps until a restart. Or one node, a load balancer or a CDN still holds the old file. A stale bundle containing an expired intermediate gives the same result.
Client side. A dead CMOS battery, a virtual machine restored from a snapshot, a manually changed date or a wrong time zone. A certificate issued minutes ago plus a clock running behind gives the "not valid yet" variant.
Renewals are getting more frequent. Under CA/Browser Forum ballot SC-081, public TLS certificates issued since March 15, 2026 can be valid for at most 200 days, dropping to 100 days in March 2027 and 47 days in March 2029. Let's Encrypt stopped sending expiry reminder emails on June 4, 2025, so manual renewal now fails silently.
ERR_CERT_DATE_INVALID.# /etc/letsencrypt/renewal-hooks/deploy/reload-web.sh (chmod +x)
#!/bin/sh
systemctl reload nginx
# systemctl reload haproxy # if HAProxy terminates TLSManaged load balancers behave differently: AWS Certificate Manager renews certificates it issued, but not certificates you imported.
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -datessudo openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -enddate. New on disk but old on the wire means nobody reloaded: sudo nginx -t && sudo systemctl reload nginx.sudo certbot renew --cert-name example.com, then find out why: systemctl list-timers | grep -i certbot, sudo certbot renew --dry-run and /var/log/letsencrypt/letsencrypt.log.openssl x509 -checkend 1209600 (14 days). More options: SSL certificate monitoring.Clearing the cache does nothing, because certificates are not stored in the HTTP cache. Right after the owner deploys a new certificate, restart the browser to drop connections that are already open.
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -checkend 2592000 && echo "valid for 30+ days"
curl -sS -o /dev/null https://example.com/ && echo "TLS OK"
# an expired certificate prints: curl: (60) SSL certificate problem: certificate has expiredCheck from outside your network too: the enterno.io SSL checker shows the served expiry date, issuer and chain.
SSL/TLS is the encryption protocol that protects data between the browser and server. Our tool analyzes the certificate, chain of trust, TLS version, and knownvulnerabilities.
Issuer, validity period, signature algorithm, covered domains (SAN), and validation type (DV/OV/EV).
Full chain verification: from leaf certificate through intermediates to root CA.
Protocol version (TLS 1.2/1.3), cipher suites, Perfect Forward Secrecy (PFS) support.
Set up a monitor — get Telegram and email alerts 30/14/7 days before expiration.
SSL certificate monitoring
TLS config audit
HTTPS as ranking factor
customer trust
www and subdomains.Strict-Transport-Security header forces browsers to always use HTTPS.SSL certificate monitoring, check history and alerts 30 days before expiry.
Sign up freeChrome compared the certificate dates with a device clock it believes is wrong. Turn on automatic date and time in your operating system and reload; the site itself is probably fine.
Run a daily check such as openssl x509 -checkend 1209600 against the served certificate and alert when it fails. Let's Encrypt stopped sending expiry emails on June 4, 2025, so do not rely on them.
The two devices disagree about the time. Fix the laptop clock and time zone; if both clocks are right, the laptop may be behind a proxy or security software presenting an old certificate.
The server is still serving the old certificate from memory, or another node, load balancer or CDN holds its own copy. Reload the web server and check the date served by every IP.
No. Certificates are checked on every new TLS connection and are not stored in the HTTP cache. Fix the clock or renew the certificate instead.
Free plan — 10 monitors, checks every 5 min, no card required. Upgrade for 1-minute interval and multi-region monitoring.