Les dangers des certificats Wildcard

Certificats wildcard - certificat SSL/TLS
Source de l’image : skylarvision via Pixabay

Les certificats TLS/SSL sont utilisés pour authentifier les serveurs (Web le plus souvent) et chiffrer le trafic entre les sites Web et les utilisateurs. Ils garantissent ainsi l’intégrité des données échangées et empêchent l’espionnage de celles-ci. La digitalisation de l’entreprise et du monde en général, ainsi que la volonté des navigateurs d’imposer le HTTPS:// par défaut, ont multiplié de manière exponentielle les besoins en matière de certificats.

Pour répondre à ces besoins croissants, le certificat wildcard (*.nomdedomaine.com) est de plus en plus envisagé par les entreprises. S’il présente certains avantages, notamment en matière de réduction des coûts et de flexibilité, il convient d’en connaître les inconvénients pour choisir le bon certificat en toute connaissance de cause. Petit tour d’horizon du certificat wildcard.

Qu’est-ce qu’un certificat wildcard ?

Un certificat TLS standard permet de sécuriser un nom d’hôte (CN pour Common Name ou FQDN pour Fully Qualified Domain Name) explicite, défini dans ses métadonnées. Exemple, Google détient un certificat pour mail.google.com.

  • Ce certificat est valide uniquement pour : https://mail.google.com/
  • Il ne peut être utilisé pour : https://google.com/ – https://images.google.com/ – https://my.mail.google.com/

En d’autres termes, le nom d’hôte doit être une correspondance exacte. Si vous essayez d’utiliser ce certificat sur https://my.mail.google.com/ vous obtenez une erreur de certificat de votre navigateur.

Un certificat TLS wildcard est différent. Comme son nom l’indique, il utilise une correspondance générique plutôt qu’une correspondance exacte. Cette correspondance générique est matérialisée par « * » dans le CN et couvre tous les sous-domaines d’un même niveau. Exemple avec le certificat *.google.com.

  • Ce certificat est valide pour : https://mail.google.com/ ET https://images.google.com/ ainsi que tous les sous-domaines possibles de google.com.
  • Il ne peut être utilisé pour : https://google.com/ (sans sous-domaine) ou https://my.mail.google.com/ (le niveau de sous-domaine n’est pas le même).

Le côté pratique du certificat wildcard ?

Dans certaines situations, le certificat wildcard est très utile. Un hébergeur qui propose des sites web pour différents clients, hébergés sur un serveur mutualisé, et accessibles via des sous-domaines différents… client1.monsite.com,  client2.monsite.com, client3… Il est peu pratique, techniquement plus compliqué et de facto plus cher de demander un nouveau certificat pour chaque client qui s’inscrit ; l’option la plus simple est un certificat wildcard pour *.monsite.com, certificat unique qui couvrira tous les clients. Le cas est identique pour une entreprise qui souhaite accéder à ses sites web via des FQDN dérivés d’un même domaine et hébergés sur un même serveur web, *.monentreprise.com. Jusque-là tout va bien.

Mais alors, quel est le risque ?

Dans les cas ci-dessus, tous les sites sont hébergés sur un seul serveur. Dans les grandes entreprises, ou pour les sites web importants, les hébergements sont souvent plus complexes et sur des serveurs différents. Reprenons notre exemple de Google avec images.google.com et mail.google.com, ces deux applications sont liées à des services différents de l’entreprise, hébergées sur des serveurs différents et gérées par des équipes techniques différentes. Ce genre d’organisation est extrêmement fréquent dans l’entreprise. Et c’est là que la sécurité des certificats wildcard s’arrête.

Le problème du certificat wildcard, et dans une moindre mesure des certificats contenant des entrées multiples (les fameux SAN, Subject Alternative Names), vient du fait de les déployer sur plusieurs serveurs. En effet, pour assurer la sécurité d’un certificat TLS/SSL, il faut absolument protéger la clé privée associée au certificat. Idéalement la mettre au coffre ou dans un HSM. Lorsqu’on installe un certificat sur plusieurs serveurs, les clés privées associées circulent, augmentant l’exposition au risque de compromission.

Cas de la compromission d’un certificat

En cas de compromission d’un certificat, ou d’erreur sur le certificat (problème de renouvellement), il convient d’intervenir rapidement pour limiter les dommages causés. Demande d’un nouveau certificat (ou renouvellement), installation du nouveau certificat et, le cas échéant, révocation du certificat compromis.

Dans notre exemple de création de sites Web sur serveur unique, ce n’est pas un problème. Nous avons un seul serveur, il a été compromis, le certificat volé/expiré/compromis ne fonctionne que pour ce seul serveur ; nous avons limité les dégâts autant que possible.

Dans un scénario à « plusieurs serveurs », si le certificat d’un seul des serveurs est affecté, il devient compromis sur l’ensemble des serveurs, ce qui va entraîner des conséquences sur l’ensemble de ceux-ci et demander une intervention bien plus large, le plus souvent en urgence, pour réparer les dégâts, et en supposant que l’ensemble des serveurs affectés soit identifié. En effet il n’est pas rare que le certificat circule au sein de plusieurs équipes et installé sans être répertorié sur nombre de serveurs. L’impact peut être considérable.

En reprenant notre exemple de Google. Imaginons que seul le serveur images.google.com ait été piraté et que mail.google.com n’ait pas été affecté. Le certificat pour images.google.com étant un certificat wildcard pour *.google.com commun à mail.google.com, le cyber-attaquant ayant compromis le service d’images a par ricochet usurpé l’identité du serveur mail.google.com et peut intercepter le trafic du service de messagerie alors que ce serveur n’a jamais été piraté !

Bonne pratique à respecter : un certificat TLS/SSL par serveur… 

Dans notre dernier exemple, si nous avions eu deux certificats et non un seul, chacun des serveurs n’ayant accès qu’à son propre certificat, nous aurions limité le risque. Dans un monde idéal, chaque certificat ne doit être utilisé que pour un serveur (ou un cluster homogène de serveurs). Différents services sur différents serveurs doivent avoir leurs propres certificats, généralement non wildcard.

Un wildcard peut être utilisé si vous avez beaucoup de noms d’hôte, de type sous-domaine, pointant vers le même service sur le même serveur. Attention cependant que ce certificat générique ne couvre pas également des noms d’hôte pointant vers d’autres serveurs ; auquel cas chaque service devrait avoir ses propres certificats.

Enfin si vous avez quelques noms d’hôte pointant vers des serveurs uniques et tout le reste sur un seul service, alors il est préférable de dissocier les noms d’hôte. Par exemple, vous pouvez avoir un certificat pour login.monsite.com et un certificat (wildcard) pour *.clients.monsite.com. Sur ce dernier exemple, si le nombre de clients est fixe ou clairement défini, il vaut mieux s’orienter vers un certificat avec une liste de SAN précise, pour mieux maîtriser les noms d’hôte sécurisés et ne pas permettre le httpS:// sur des noms d’hôte non maîtrisés.

Conclusion

L’option du certificat wildcard existe et c’est une bonne chose pour certains besoins très spécifiques. Dans les faits, on ne devrait jamais avoir besoin de mettre en place un certificat wildcard, pas plus qu’on ne devrait installer un même certificat sur différents serveurs non bâtis en cluster.