SSL certificate expired, website says "Not Secure": how to fix it

First, confirm it's really expiry

A "Not Secure" label or a full-page warning has a few possible causes. Check what you're dealing with before changing anything:

`bash

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \

| openssl x509 -noout -subject -enddate

`

Fix on cPanel / shared hosting (AutoSSL)

1. Log in to cPanel and open SSL/TLS Status.

2. Find the domain. If it shows an error, the message usually says why validation failed.

3. Fix the cause. Common ones:

- DNS for the domain no longer points at this server (for example, the site moved, or a proxy/CDN was added).

- A redirect or security rule blocks requests to /.well-known/ on port 80.

- The domain or subdomain was removed from the account.

4. Click Run AutoSSL and wait for it to finish.

5. Check again with the command above. If the panel shows a new certificate but openssl still shows the old one, contact the host. The server may not have picked it up yet.

If AutoSSL can't issue a certificate and you can't fix the cause quickly, ask the host to install one by hand. Many hosts will do this on a support ticket.

Fix on a VPS with Certbot

`bash

sudo certbot certificates # list certs and their expiry dates

sudo certbot renew --dry-run # test renewal without changing anything

sudo certbot renew # renew anything that's due

`

If the dry run fails, read the error. It usually points to one of these:

After a successful renewal, reload the web server so it serves the new certificate:

`bash

sudo nginx -t && sudo systemctl reload nginx

sudo apachectl configtest && sudo systemctl reload apache2

`

Forgetting this reload is a classic: the certificate on disk is new, but the server keeps serving the old one from memory.

Behind a CDN or proxy

There are two certificates: the one visitors get from the proxy, and the one between the proxy and your server. Find out which one expired (the openssl check shows the visitor-facing one). Renew that one in the proxy's dashboard, or on the origin server, depending on which it is.

After the fix

Why it happened, and how to stop it happening again

Auto-renewal usually fails without anyone noticing, and the only sign is the expiry date getting closer. Two changes make this more likely now:

The fix is a habit, not a tool. Keep a list of every hostname and its expiry date, sorted by days left. Treat anything under 30 days that hasn't renewed as a warning, since that's around when ACME clients normally renew. Get a reminder at 30, 14 and 7 days.

We make Lapsewatch, one simple way to keep that list. Paste example.com, 2026-12-01 lines into its free checker and it sorts them by days left, marking each Expired, Urgent (7 days or less), Soon (30 days or less) or OK. It works from the dates you enter; it doesn't scan your sites. Paid plans add calendar reminders at 30, 14 and 7 days before each expiry.

Try it