On décrit souvent un certificat comme rendant un site sûr, ce qui amène les gens à se fier à un cadenas posé sur un site auquel il ne faut pas se fier du tout. Il prouve deux choses bien précises, et aucune des deux n'est que le commerce est honnête.
Ce qu'il prouve
- Que vous parlez au titulaire de ce nom de domaine. Quelqu'un a démontré à une autorité de certification qu'il contrôlait le domaine.
- Que personne au milieu ne peut lire ni modifier le trafic. La connexion est chiffrée et son intégrité est vérifiée.
Ce qu'il ne prouve pas
- Que l'entreprise derrière le domaine existe, ou qu'elle est digne de confiance.
- Que le site n'est pas une page d'hameçonnage : les sites d'hameçonnage ont des certificats valides, et la plupart en ont un.
- Que l'application est sûre. Un certificat protège le fil, pas le code qui est derrière.
Comment la preuve est faite
De trois façons, qui prouvent toutes le contrôle du domaine : servir un fichier précis à une URL donnée, répondre sur le port 443 avec un certificat précis, ou publier un enregistrement TXT dans le DNS. Seule la dernière permet d'émettre un certificat joker.
# what a certificate says about itself
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com < /dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
La chaîne, c'est l'autre moitié
Votre certificat est signé par un intermédiaire, lui-même signé par une racine à laquelle le navigateur fait déjà confiance. Servez la chaîne de façon incomplète et certains clients ne peuvent pas la vérifier - voyez une chaîne de certificats incomplète.
Ce qui veut dire
Un certificat gratuit prouve exactement autant qu'un payant - voyez Let's Encrypt face à un certificat payant.