SSL certificate expired: how to check the expiry date and renew it (free options)
- When an SSL certificate expires, browsers show a full-page warning and most visitors leave.
- Check the expiry date from the padlock in your browser, with
openssl, or with a free checker. - Let's Encrypt and Cloudflare issue certificates for free. What matters is that auto-renewal is on, reloads your web server, and is monitored.
An SSL certificate (strictly speaking, a TLS certificate) is what lets your site run on https://: traffic is encrypted and the browser can confirm the visitor really reached your domain. After the expiry date the site is still running, but visitors see a red warning page instead of your shop.
Certificate lifetimes keep getting shorter. Let's Encrypt certificates are valid for 90 days. Under the CA/Browser Forum schedule, the maximum validity of publicly trusted certificates drops to 200 days from March 2026 and continues to fall in steps to 47 days by 2029. Renewing by hand, once or twice a year, is turning into renewing every few weeks — automate it.
Signs your certificate has expired
- A full-page browser warning: Chrome says "Your connection is not private" with
NET::ERR_CERT_DATE_INVALID; Firefox shows a security risk warning withSEC_ERROR_EXPIRED_CERTIFICATE; Safari says the connection is not private. - Integrations break: mobile apps, payment gateways and webhooks start failing with certificate errors.
- Customers ask whether your site has been hacked, and traffic or orders drop suddenly.
Note: if a visitor's device clock is wrong, they can see a date error even when the certificate is valid. Check from outside before you conclude anything.
How to check the expiry date
1. In the browser
Click the icon to the left of the address bar, open the connection details and view the certificate. "Valid to" or "Expires on" is the expiry date.
2. With openssl
On any machine with OpenSSL (macOS, Linux, or Git Bash on Windows), replace example.com with your domain:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates
The notAfter= line is the expiry date (in GMT). Keep -servername: on servers that host several domains, leaving it out can return a different domain's certificate. To test whether a certificate expires within the next 14 days (1,209,600 seconds), pipe the certificate into openssl x509 -noout -checkend 1209600; it prints whether the certificate will expire and exits non-zero if so, which is handy in a cron job.
3. With a free checker
The SSL & HTTPS checker reads the certificate the way a browser does and shows the days left, the expiry date and the issuer. It also checks whether the site loads over HTTPS at all, redirects http:// to https://, sends HSTS, and avoids mixed content (images, scripts or CSS loaded over plain http).
Enter a domain to see days left, expiry date and issuer, plus HTTPS redirect, HSTS and mixed content. Free, takes a few seconds.
Free ways to renew
Hosting with built-in Let's Encrypt
Most hosting panels (cPanel, DirectAdmin, Plesk and others) have a free SSL section, often called AutoSSL or Let's Encrypt. Turn it on once and the host renews it. If it still expires, read the error shown there or ask your provider.
Your own server (VPS): certbot
Certbot is the most common client for Let's Encrypt. On a server running Nginx:
sudo certbot --nginx -d example.com -d www.example.com
For Apache, use --apache instead of --nginx. When installed the official way (snap or your OS packages), certbot sets up a scheduled renewal task (a systemd timer or a cron job). Check that it really works:
sudo certbot renew --dry-run # test renewal without replacing the real certificate
systemctl list-timers | grep certbot # or look at /etc/cron.d/certbot if it uses cron
sudo certbot certificates # list certificates and their expiry dates
Certbot only renews when a certificate is close to expiry (by default around 30 days before, for a 90-day certificate), so running it daily is safe. After renewal the web server must reload to pick up the new file. The --nginx and --apache plugins do this for you; if you used certonly, add a hook such as --deploy-hook "systemctl reload nginx". Other software that serves the certificate (a mail server, a Node app, a load balancer) needs its own reload or restart.
Cloudflare
If your domain is proxied through Cloudflare (orange cloud), Cloudflare issues and renews the certificate between visitors and Cloudflare. The leg from Cloudflare to your server still needs a certificate: choose the Full (strict) SSL mode and install a valid certificate on the server, such as a Cloudflare Origin Certificate (long-lived, trusted only by Cloudflare) or Let's Encrypt. Avoid Flexible, which leaves that leg unencrypted.
Caution: switch to Full (strict) only after the server has a valid certificate for the right hostname. If the origin certificate is missing, expired or for another name, Cloudflare returns error 526 to every visitor straight away.
Why auto-renewal still fails
- DNS changed: the domain now points to a new server or CDN, so validation through the old server fails.
- The validation path is blocked:
/.well-known/acme-challenge/is redirected wrongly or blocked by a security plugin, firewall or.htaccessrule, or port 80 is closed. - A CAA record in DNS doesn't allow the certificate authority you're using.
- Rate limits: issuing new certificates repeatedly while testing hits Let's Encrypt limits. Use
--dry-runor the staging environment. - Renewed but not reloaded: the web server is still serving the old certificate from memory.
- The scheduled task is gone after a server move or OS upgrade.
- Paid certificates: the invoice wasn't paid, or reminders go to a mailbox nobody reads.
- Missing hostname: the certificate covers
example.combut notwww.example.com, or the other way round.
If the certificate has already expired
- Confirm from outside with the
opensslcommand above or from another device. - Renew: reissue from your hosting panel, or run
sudo certbot renewon a VPS and read any error carefully. - Reload or restart the web server, then check both the
wwwand non-wwwaddresses. - Find out why auto-renewal failed using the list above and fix it so it doesn't happen again.
Don't find out from your customers
Auto-renewal deserves an independent check. If you turn on email alerts and verify that you own the domain, WebsiteScanner re-scans the site weekly for free and emails you when the SSL certificate has 14 days or less left, or is invalid. WebsiteScanner PRO ($8/month or $80/year by card; 199,000₫/month or 1,990,000₫/year by VietQR) adds a deep scan — 5,000+ checks for known vulnerabilities — and uptime checks every 5 minutes.
Frequently asked questions
Is a free SSL certificate less secure than a paid one?
Not in terms of encryption. Let's Encrypt and paid DV certificates use the same encryption standards and are trusted by browsers in the same way. Paid certificates differ mainly in business validation (OV, EV) and support. Let's Encrypt certificates are short-lived, so auto-renewal is essential.
Does an expired SSL certificate delete any website data?
No. Your data is untouched, but browsers show a full-page warning so most visitors leave, and integrations such as payment gateways and webhooks may stop calling your site.
I renewed it but the browser still says expired. Why?
Usually the web server has not been reloaded and is still serving the old certificate, or the new certificate was installed somewhere other than where the site is served from, such as a CDN or load balancer. Reload the web server and check again from outside.
Do I need a certificate on my server if I use Cloudflare?
You should. Cloudflare covers the connection between visitors and Cloudflare. To encrypt and authenticate the connection from Cloudflare to your server, install a valid certificate there (a Cloudflare Origin Certificate or Let's Encrypt) and use Full (strict) mode.
One free scan covers HTTPS, security headers, exposed sensitive files and signs of malware.