Inspecteur de certificat TLS

Nous ouvrons une connexion TLS vers le site comme le fait un navigateur et nous lisons son certificat, même cassé. Si quelque chose cloche, vous saurez de laquelle des pannes habituelles il s’agit.

Ou essayez github.com, expired.badssl.com

À quoi sert un certificat

Quand votre navigateur se connecte à https://example.com, quelque chose répond. Reste à savoir si ce quelque chose appartient bien à example.com. N’importe qui sur le réseau, entre vous et le site, aurait pu répondre à sa place.

Le serveur doit donc montrer patte blanche. Un certificat est un petit fichier qui contient une clé publique, la liste des noms d’hôte au nom desquels cette clé peut parler, une date de début, une date de fin et la signature d’une autorité de certification (AC) qui a vérifié qui contrôle ces noms. Le navigateur déroule sa liste. Le nom de la barre d’adresse doit figurer sur le certificat. La date du jour doit tomber entre les deux dates. La signature doit remonter à une autorité que l’appareil connaît déjà. Et le serveur doit prouver qu’il détient la clé privée correspondante. Il suffit qu’un seul de ces points manque pour que le visiteur voie l’avertissement plein écran.

Le chiffrement ne commence qu’une fois tout cela vérifié. Le cadenas signifie que le serveur a prouvé son identité et le chiffrement repose sur cette preuve.

Ce que l’inspecteur teste

Il se connecte deux fois au port 443. La première fois, il accepte tout, pour pouvoir lire le certificat quel que soit son état. La seconde fois, il vérifie tout par rapport à une liste standard de racines de confiance, comme le ferait un client strict.

TestRésultat
DatesRouge si expiré ou pas encore valide. Orange sous 7 jours restants, une note sous 21 jours, vert sinon.
NomsRouge si le nom d’hôte saisi n’est pas couvert. Orange si son jumeau (avec ou sans www) existe dans le DNS mais manque au certificat.
ConfianceSi la vérification échoue, vous obtenez la cause : expiré, mauvais nom, autosigné, chaîne incomplète, ou l’erreur de vérification brute.
Ordre de la chaîneOrange si les certificats envoyés ne se signent pas les uns les autres dans l’ordre.
Clé et signatureRouge pour une clé RSA de moins de 2048 bits ou une signature SHA-1 ou MD5.
ProtocoleRouge si la connexion est négociée avec une version antérieure à TLS 1.2.

Il demande ensuite les quatre formes de l’adresse (http et https, avec et sans www) et montre où chacune aboutit et si le site envoie un en-tête HSTS. Pour voir cette partie étape par étape, le suivi de redirections s’en charge.

Ça marche dans Chrome, ça échoue partout ailleurs

Les autorités ne signent pas votre certificat avec leur clé racine. Elles le signent avec un certificat intermédiaire, lui-même signé par la racine. Les appareils ne conservent que les racines, donc votre serveur doit envoyer l’intermédiaire avec son propre certificat. Les deux ensemble forment la chaîne.

Quand un serveur n’envoie que son propre certificat, Chrome et Edge sur ordinateur se montrent indulgents. Ils téléchargent souvent l’intermédiaire manquant ou réutilisent un intermédiaire vu sur un autre site. Firefox sur un profil neuf, les anciens téléphones Android, curl, les webhooks de paiement, les serveurs de messagerie et la plupart des bibliothèques de programmation ne vous feront pas cette faveur. C’est ainsi qu’on se retrouve avec un site parfait aux yeux de son propriétaire qui échoue pour un client d’API. L’inspecteur appelle cela Incomplete chain (chaîne incomplète) et le signale quand la vérification échoue et qu’un seul certificat a été envoyé.

Réparer les pannes courantes

  • Expiré. Les certificats automatisés se renouvellent environ 30 jours avant la fin, donc si le vôtre a expiré, la tâche de renouvellement échoue depuis des semaines. Avec Certbot, lancez certbot renew --dry-run et lisez l’erreur. C’est souvent un enregistrement DNS qui a changé, un pare-feu qui ferme le port 80, ou une redirection qui avale /.well-known/acme-challenge/.
  • Nom non couvert. Redemandez le certificat en listant tous les noms d’hôte : certbot -d example.com -d www.example.com. Un joker *.example.com couvre un seul niveau de sous-domaines. Il ne couvre pas example.com lui-même, ce qui piège beaucoup de monde.
  • Chaîne incomplète. Faites pointer le serveur vers le fichier de chaîne complète. Dans nginx : ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;. Dans Apache 2.4.8 et plus, SSLCertificateFile accepte le même fichier.
  • Autosigné. Remplacez-le par un certificat d’une autorité publique. Let’s Encrypt, ZeroSSL et Google Trust Services en offrent gratuitement.
  • Ancien protocole. Activez TLS 1.2 et 1.3. Dans nginx : ssl_protocols TLSv1.2 TLSv1.3;

Vous pouvez voir la même chose depuis un terminal avec openssl s_client -connect example.com:443 -servername example.com.

L’inspecteur parle à une seule adresse IP sur le port 443 et indique le protocole qui a été négocié, pas toutes les versions que le serveur accepterait. Un site réparti sur plusieurs serveurs peut présenter un autre certificat sur une autre adresse. La révocation n’est pas vérifiée.

Questions fréquentes

SSL et TLS, est-ce la même chose ?

TLS est le nom actuel du protocole. SSL l’a précédé et sa dernière version a été retirée en 2015. On dit encore « certificat SSL » par habitude, mais tous les certificats utilisés aujourd’hui fonctionnent avec TLS.

Combien de temps un certificat SSL est-il valide ?

Les certificats Let’s Encrypt durent 90 jours. Pour toutes les autorités publiques, le maximum autorisé est passé de 398 à 200 jours en mars 2026 et il tombera à 100 jours en mars 2027 puis à 47 jours en mars 2029. À ce rythme, renouveler à la main n’est plus réaliste.

Mon certificat est valide. Pourquoi le navigateur affiche-t-il quand même « Non sécurisé » ?

Souvent pour l’une de ces trois raisons. La page a été ouverte en http:// et rien ne la redirige vers HTTPS, le certificat ne couvre pas le nom d’hôte exact de la barre d’adresse, ou la page charge des scripts ou des images en HTTP simple. Le tableau des redirections dans le résultat vous renseigne sur la première.

Que signifie ERR_CERT_COMMON_NAME_INVALID ?

Le nom d’hôte visité ne figure pas dans la liste des noms du certificat. Cela arrive souvent sur www quand seul le domaine nu a été demandé, ou sur un nouveau sous-domaine auquel on sert un certificat par défaut.

Un certificat gratuit est-il moins sûr qu’un certificat payant ?

Non. Le chiffrement est identique et les navigateurs traitent les deux de la même façon. Ce que vous payez, c’est le support, une garantie ou les informations de votre organisation inscrites dans le certificat et les navigateurs ne les mettent plus en évidence.

Combien de temps à l’avance faut-il renouveler un certificat ?

Les clients automatisés renouvellent quand il reste un tiers de la durée de vie, soit environ 30 jours pour un certificat de 90 jours. S’il ne reste plus que 7 jours, seuil où ce contrôle commence à avertir, l’automatisation a probablement cessé de fonctionner.