The handshake and its errors
In one sentence
In the TLS 1.3 handshake the server proves it holds its certificate's key while ECDHE agrees the session secret; each failed check becomes a different error message.
The situation
Monday morning. You open a supplier portal that your team uses every day, and the browser shows a full-page warning: NET::ERR_CERT_AUTHORITY_INVALID. A colleague leans over and says: “Just click Advanced and carry on, it does that sometimes.”
Before anyone clicks: who made the mistake here? The website, the network you are on, or your own device? By the end of this lesson you will know how to tell.
What is going on
The handshake in one round trip
Before any page loads, browser and server run the TLS handshake. Here is TLS 1.3, defined in RFC 9846:
- ClientHello. The browser lists what it supports, sends its ECDHE key share (lesson 2) and names the site it wants. That name is called SNI; unless the newer Encrypted Client Hello is in use, the network can see it.
- ServerHello. The server sends its own key share. Both sides compute the shared secret, and from here on the handshake is encrypted.
- Certificate, CertificateVerify, Finished. The server sends its leaf and intermediates (lesson 6). Then it signs the handshake so far with the certificate’s private key. That signature, CertificateVerify, is the proof that the server holds the key (lesson 4).
- The client checks, then sends its own Finished, and encrypted data flows.
Notice what the certificate’s key does: it signs. It never encrypts the traffic. The session keys come from the ECDHE exchange.
Three checks, three families of errors
The client checks that the chain leads to a root in its trust store, that the site’s name is in the SAN, and that the certificate is within its dates. Each failure has its own error, and every tool words it differently:
| Failed check | Chrome and Edge | Firefox | Usual causes |
|---|---|---|---|
| Chain and trust | NET::ERR_CERT_AUTHORITY_INVALID |
SEC_ERROR_UNKNOWN_ISSUER |
Missing intermediate, private or self-signed certificate, inspecting proxy, outdated trust store |
| Name | NET::ERR_CERT_COMMON_NAME_INVALID |
SSL_ERROR_BAD_CERT_DOMAIN |
Name missing from the SAN, wildcard too narrow, wrong certificate served |
| Dates | NET::ERR_CERT_DATE_INVALID |
SEC_ERROR_EXPIRED_CERTIFICATE |
Expired certificate, or a wrong clock on the device |
So who made the mistake?
For NET::ERR_CERT_AUTHORITY_INVALID, it can be any of the three:
- The website: it serves a self-signed certificate or one from a private CA, or its chain is incomplete and the browser could not repair it.
- The network: a company proxy or security product that inspects HTTPS re-signs every site with its own root. If that root is not in your device’s trust store, every site fails. An attacker in the middle produces the same error.
- Your device: an old phone or operating system with an outdated trust store.
The error alone does not tell you which. Try the same site from another network and another device, then check the chain with a tool. If only one site fails everywhere, it is the website. If every site fails on one network, look at the network. Never click through by habit: on sites that use HSTS, browsers do not even offer that option.
Try it
Paste a certificate error you have seen, or one from the table above. The finder shows the matching error page and its likely causes. Decide which check failed, and whether the causes point to the website, the network or your device.
Check
In a TLS 1.3 handshake, what does the server's CertificateVerify message prove?
RightNot quite The answer is A: That the server holds the private key matching the public key in its certificate
- What happened
- CertificateVerify is a signature over the handshake, made with the certificate's private key. Only the real key holder can produce it.
- Why
- Anyone can copy and send a certificate. This signature ties this live connection to the private key behind it, so an impostor with a copied certificate fails here.
- The rule
- The certificate key signs to prove identity; ECDHE agrees the secret that encrypts the traffic.
Show answer
Answer A That the server holds the private key matching the public key in its certificate
- What happened
- CertificateVerify is a signature over the handshake, made with the certificate's private key. Only the real key holder can produce it.
- Why
- Anyone can copy and send a certificate. This signature ties this live connection to the private key behind it, so an impostor with a copied certificate fails here.
- The rule
- The certificate key signs to prove identity; ECDHE agrees the secret that encrypts the traffic.
One laptop shows NET::ERR_CERT_DATE_INVALID on many different, well-known sites. Other devices are fine. What is the most likely cause?
RightNot quite The answer is C: The laptop's date or time is wrong
- What happened
- The laptop's clock is outside the validity period of perfectly good certificates.
- Why
- Many unrelated sites failing on one device, and only there, points at that device. Validity checks use the local clock.
- The rule
- When many sites fail with date errors on one device, check its date and time before blaming the sites.
Show answer
Answer C The laptop's date or time is wrong
- What happened
- The laptop's clock is outside the validity period of perfectly good certificates.
- Why
- Many unrelated sites failing on one device, and only there, points at that device. Validity checks use the local clock.
- The rule
- When many sites fail with date errors on one device, check its date and time before blaming the sites.
On the office network, every HTTPS site shows NET::ERR_CERT_AUTHORITY_INVALID on your personal laptop. At home everything works. What is the most likely explanation?
RightNot quite The answer is B: Something on the office network presents its own certificates, signed by a root your laptop does not trust
- What happened
- A device on that network intercepts HTTPS and re-signs sites with its own root, which is missing from your laptop's trust store.
- Why
- It may be an approved inspection proxy whose root is only installed on managed devices, or it may be an attack. The error looks the same in both cases.
- The rule
- When every site fails on one network only, report it to IT; do not click through, and do not install unknown roots.
Show answer
Answer B Something on the office network presents its own certificates, signed by a root your laptop does not trust
- What happened
- A device on that network intercepts HTTPS and re-signs sites with its own root, which is missing from your laptop's trust store.
- Why
- It may be an approved inspection proxy whose root is only installed on managed devices, or it may be an attack. The error looks the same in both cases.
- The rule
- When every site fails on one network only, report it to IT; do not click through, and do not install unknown roots.
Takeaways
- In TLS 1.3, ECDHE agrees the secret and the certificate’s key only signs to prove identity.
- The client checks chain, name and dates; each failure is a family of errors with different names in every tool.
- A certificate error can be the website’s, the network’s or the device’s fault. Test from another network and device before deciding.
Go further
- Handbook: The TLS 1.3 handshake
- Error pages: all certificate errors explained
- Next lesson: When trust breaks
Early edition. Checked against the standards; an independent expert review is in progress. Found a mistake? Tell us.