Expired SSL certificate: what your visitors see

By Fabien Hernoux 7 min read

An expired certificate does not produce a discreet warning. It produces a full-page interstitial, usually red, saying your connection is not private and that attackers may be trying to steal information. Most visitors do not click through it. Many conclude the site has been hacked.

Meanwhile your server is perfectly fine. It is serving pages exactly as it did yesterday, it answers in milliseconds, and none of your logs report anything at all.

The exact message tells you which of the four problems you have

Before touching anything, read the error code shown under the message. Browsers hide it behind an "advanced" link, and it carries all of the information.

What the browser shows The real problem Fix
ERR_CERT_DATE_INVALID The certificate expired Renew and reload
ERR_CERT_COMMON_NAME_INVALID This hostname is not covered Reissue including the subdomain
ERR_CERT_AUTHORITY_INVALID Incomplete chain or self-signed certificate Install the intermediate certificate
ERR_SSL_PROTOCOL_ERROR The TLS service is not answering properly Server configuration, not the certificate
Warning on mobile only Incomplete chain, almost always See below

The first two rows are fixed with one command. The third is the sneakiest and deserves its own section. The fourth is not a certificate problem at all.

Why it happens to sites that work

The reminder went to an address nobody reads. Certificate authorities warn you by email, at whatever address was entered when the certificate was issued: often a generic mailbox, sometimes a developer who left two years ago.

Automatic renewal failed silently. The renewal is scheduled and it errors out. Nothing fails loudly; the certificate simply stops being replaced. This is the most common cause on modern servers, and it has three classic variants.

The certificate was renewed but not deployed. A new file exists on disk, dated today, perfectly valid. The web server is still holding the old one in memory, because nobody reloaded it. Genuinely maddening, and very common.

A subdomain was forgotten. The certificate covers example.com and www, but not the shop. you added in March. The main site is fine, and a slice of your traffic hits a wall.

What a visitor does in front of that page

They do not read the error code. They see a crossed-out padlock, a red background, and a sentence about stolen information. Three reactions cover almost all of it: close the tab, go back to the search results and click the next one, or write to someone to report that your site has been hacked. The third one is the only one you ever hear about, which is why this failure always feels rarer than it is: the two silent reactions leave no trace anywhere.

None of those three can be repaired afterwards. That is what separates this failure from an ordinary server error: a page returning a 500 or a 503 worries a visitor, a page announcing an attempted theft makes them leave and leaves them with a memory.

Be wary of the figures circulating about how many people click through: they come from old samples and from contexts that are not yours. What is certain is that the button to continue is deliberately hidden behind two clicks, and that the whole design of that page exists so nobody crosses it.

The half-day that costs the most

The block appears at the exact moment the certificate expires, often at night, often on a weekend, because that is when the ninety days happened to end. By the time someone notices on Monday morning, the site has been showing a security warning to every visitor for thirty-six hours.

Nobody will call you during that time: your internal tools see nothing, and neither does your host, since from their point of view the machine is answering perfectly. This is the failure that looks most like an outage without being one, which is why it belongs in the same reflex as the first fifteen minutes of any incident: look from the outside before looking at the code.

Checking in thirty seconds

One command gives you the expiry date of the certificate actually presented to the public, which is not always the one sitting on your disk:

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

notAfter gives the deadline, subject and the alternative names tell you which hosts are covered. Repeat it for every subdomain you serve: each one is a separate question.

If you do not have a terminal handy, or you just want the number: our certificate reader does the same thing from the browser, and gives you the date, the hosts covered and the state of the chain.

The incomplete chain case

This is the trap that wastes the most time, because it does not show up on the machine of the person checking.

A certificate does not stand alone: it is signed by an intermediate, itself signed by a root. Your server must serve the certificate and the intermediate. If it omits the second, desktop browsers often cope, because they cached that intermediate during an earlier visit to some other site. Mobile devices refuse.

The result: the site works perfectly on your machine and shows a warning to a share of your visitors. The test is done from a phone on mobile data, or with the command above from a machine that has never visited the site.

What short lifetimes changed

Ten years ago a certificate lasted a year or more, and a reminder in a shared calendar did the job. Today's free certificates last ninety days, and the general trend is towards shorter lifetimes still, for good security reasons.

That shifts the problem entirely. An annual renewal is an event somebody remembers; a quarterly renewal is an automatic routine nobody watches. The question is no longer "who remembers to renew" but "who verifies that the automation still works".

It is a reversal worth stating, because it makes two old habits useless. Writing the expiry date in a calendar no longer helps: it changes four times a year. Trusting the renewal log no longer helps either: the three classic failures leave a trace nobody opens, and the third one does not even leave an error.

One check keeps its meaning, and it is the one that looks from the outside.

What actually prevents it

Watch the expiry date, not the renewal job. A monitor that reads the certificate presented by your server and counts the days remaining tells you the truth: it sees the certificate a visitor would get, not the one on disk. All three causes above end in the same place, and this single measurement catches all three.

Alert with real margin. Thirty days, then seven, then one. Thirty days is enough to fix a broken renewal calmly; one day is enough to catch a deployment that silently did not reload.

Check every hostname you serve. Each subdomain is a separate certificate question, and the forgotten one is always the one that was added later. A wildcard certificate solves that for one level of subdomain and for one level only, which is a detail that surprises people at the worst possible moment.

Put a human address on the certificate. It costs nothing and it is the last line of defence when everything else has been forgotten.

What it is not

It is not a hack, and saying so plainly to whoever reported it saves an hour of pointless panic. It is not a server outage: nothing to restart, nothing to restore. And it is not primarily a ranking problem.

What HTTPS actually changes for search engines is more modest than the urgency of this page suggests. The reason to fix a certificate is the visitor seeing red, not the algorithm.

In Expansel Website monitoring Expansel checks your sites at regular intervals and writes to you as soon as one stops responding, or when its certificate is about to expire.

Frequently asked questions

Is the site actually down?

No. The server is serving pages perfectly. The browser is refusing to show them, which for a visitor is the same thing, and worse, because it looks like a security problem rather than a technical hiccup.

How much warning do I get?

None, unless something is watching. Certificate authorities send reminder emails to the address on file, which is very often an address nobody has read in two years.

Do search engines care?

Crawlers hitting a certificate error cannot fetch the page. A few hours changes nothing; several days on a site being actively crawled is a different conversation.

Never lose a backlink again

Add your sites and links, and let Expansel watch them for you.

Start free