C'est quoi, CN et subjectAltName ?
Le Common Name (CN) est le nom du certificat, visible très rapidement en affichant le certificat (via un logiciel de Windows, en cliquant sur l’icône ad hoc de votre navigateur Internet…).
Le subjectAltName est une extension de la norme de certificats (x.509 v3, datant de 1999). Son rôle est de lister tous les noms précis pour lesquels le certificat existe : noms DNS, emails, adresses IP…
Comment un certificat est-il déclaré valide ?
Un certificat est valide s’il répond à 3 critères :
- Les dates du certificat (date de début et date de fin) sont correctes par rapport au moment où on utilise le certificat (dateDébut < dateActuelle < dateFin).
- Le certificat est signé par une autorité à laquelle on fait confiance.
- Le nom du certificat correspond au nom du site Web.
Quel nom doit-on utiliser dans un certificat ?
L’usage précédemment répandu voulait qu’on n’utilise qu’un seul nom dans le certificat. Historiquement, on utilisait le Common Name pour cela. Et le 3e critère dans ma liste ci-dessous consistait à comparer le nom de domaine présent dans l’URL du site avec le CN du certificat.
Depuis l’arrivée du x.509 v3, les normes indiquent un nouveau comportement.
La RFC 2818 (HTTP over TLS) dit : on va toujours récupérer le nom de domaine présent dans l’URL du site Web, mais on va le comparer avec :
- chaque élément présent dans la liste du subjectAltName, si cette extension existe ;
- le CN du certificat, si l’extension SAN est absente.
La RFC 3280 (mémo pour les certificats x.509) précise même que, s’il existe un nom au format strict (appelé dNSName, qui décrit le format DNS du nom), alors ce nom doit absolument être déclaré dans l’extension subjectAltName !
Compatibilité avec les navigateurs Web
Les navigateurs Web actuels testent toujours la validité du certificat selon la RFC 2818, c’est-à-dire en regardant le subjectAltName puis le CN.
Sauf que. Sauf Chrome qui, dans sa version 58 (mai 2017), commence à respecter de manière stricte les normes. Si on navigue sur un site Web en HTTPS, alors ce site possède forcément un nom au format DNS, donc ce nom doit obligatoirement être présent dans le champ subjectAltName et, si ce n’est pas le cas, alors le certificat est déclaré invalide (car il ne respecte pas la norme).
L’entreprise Google, via son navigateur Chrome, domine le marché (63 % Chrome, 14 % Firefox, 9 % Internet Explorer, 5 % Safari et 2 % Opera, en mai 2017).
Google profite de sa domination pour enrayer une pratique communément utilisée : au lieu d’essayer de respecter les normes, on les respecte, un point c’est tout (« N’essaie pas de le faire, fais-le ou ne le fais pas. » – Yoda). Cette action entre dans le cadre d’un vaste programme lancé par cette entreprise pour « rendre l’Internet plus sûr », en forçant le pas pour respecter les normes existantes et appliquer des nouvelles normes de sécurité renforcée :
- SSLv2 et SSLv3 ne sont plus sécurisées ;
- TLS v1.0 et TLS v1.1 ne sont plus sécurisées dans certains cas techniques ;
- on favorise l’émergence et l’utilisation de nouvelles normes Web comme :
- HSTS
- HPKP
- CSP