Utilisez-vous HTTPS pour vos services internes ? La plupart du temps, le certificat lié au serveur est auto-signé, et n’est donc pas reconnu immédiatement par les navigateurs.
Je vais vous expliquer comment il est possible d’obtenir un certificat SSL 100% valide pour vos services internes, et ce même si le serveur n’est jamais exposé sur internet, grâce à la validation DNS de Let’s Encrypt.
I - Principe général
1 - Pourquoi préférer un certificat valide ?
Lorsqu’on se connecte à un serveur web avec certificat auto-signé pour la première fois, un message familier des administrateurs réseaux s’affiche :
L’autorité de certification n’est pas reconnue par le navigateur (ici Firefox), qui alerte de la possiblitité d’une attaque man-in-the-midle. On peut généralement passer outre, ce qui va ajouter une exception pour ce site. Ce qui fait que dorénavant, il n’y aura plus d’alerte de ce type : donc plus de protection.
Sur un réseau local, le risque est très limité, car pour qu’un attaquant profite de cette faille, il faut déjà qu’il soit introduit sur le réseau local. En revanche les dégâts potentiels sont importants puisque l’attaquant peut alors voir tout le traffic non chiffré (y compris le mot de passe rentré), sans que l’administrateur s’en aperçoive.
Ce message reviendra aussi inévitablement quand on change de navigateur, d’appareil ou en vidant le cache du navigateur, ce qui pour moi revient à un affichage très régulier.
Plus important encore, ce message est très, TRÈS énervant. Alors comment s’en débarrasser ?
2 - Certificat Let's Encrypt
Il faut d’une manière ou d’une autre que le certificat présenté par le serveur soit issu d’une autorité de certification considérée comme de confiance par les machines clientes.
On peut rajouter une autorité de confiance dans les paramètres de chaque machine manuellement. Seulement cela demande beaucoup de configuration manuelle pour chaque machine, ou un contrôle par un domaine via des GPO sous Active Directory Windows par exemple.
Ou alors, obtenir un certificat par une Autorité de Certification définie comme de confiance par défaut.
La deuxième solution parait la plus pratique au quotidien, mais est normalement réservée aux hôtes communiquant sur internet : pour valider le certificat, l’autorité de certification a besoin de valider l’authenticité de l’hôte. Pour ce faire, soit l’autorité valide humainement l’authenticité avec l’administrateur (le certificat est donc payant), soit dans le cas de Let’s Encrypt, elle valide par un challenge HTTP ou DNS.
L’astuce se situe dans le dernier cas : pour effectuer un challenge DNS, Let’s Encrypt regarde la zone DNS pour l’hôte demandé à la recherche d’enregistrements spécifiques TXT. Ils peuvent être ajoutés manuellement, ou automatiquement avec Certbot ou ACME, selon le registrar du domaine. Cela passe en général par l’ajout d’une clé API.
II - Exemples
1 - Proxmox Backup Server
Proxmox Backup Server (PBS) est une solution de sauvegarde qui s’intègre parfaitement avec l’hyperviseur Proxmox Virtual Environment (PVE). PVE comme PBS supportent la création de certificat’s Let’s Encrypt par validation DNS.
Nous allons demander un certificat Let’s Encrypt pour pbs.platylab.com, avec ACME intégré à PBS pour automatiser le renouvellement du certificat et connecter l’API du registrar de domaine (ici OVH) :
Ajout de l’entrée pbs.platylab.com vers <adresseIP_PBS> dans le serveur DNS local
Création du compte Let’s Encrypt. L’adresse mail choisie servira aux notifications d’expiration du/des certificat(s) :
Configuration du challenge DNS. Diffère selon le registrar, mais cela nécessite en générale une clé d’API pour que ACME ajoute les entrées nécessaires à l’obtention et au renouvellement du certificat, et les supprime à la fin :
Ajout du nom de domaine à vérifier par ACME, avec sa méthode de vérification :
Sélectionner le compte Let’s Encrypt à utiliser, et émettre le certificat.
Fini les alertes ! On peut maintenant accéder à https://pbs.platylab.com:8007 et profiter du chiffrement TLS à 100%. En cas de problème de résolution DNS en local, on peut toujours rajouter l’enregistrement dans le fichier hosts, ou accéder via l’IP comme auparavant (néanmoins avec toujours les mêmes limitations).
2 - Certbot pour Apache
3 - SSL offloading avec un Reverse-proxy : HA-Proxy
Parfois, il n’est pas possible de modifier le certificat du serveur web. C’est notamment le cas de beaucoup d’interfaces d’administration d’équipements réseau, ou un service géré par un prestataire sur lequel vous n’avez pas la main. Une solution possible est d’utiliser un reverse-proxy.
De nombreux reverse proxy son possibles : Treaffik, Caddy, Nginx… ici je vais prendre l’exemple de HAProxy intégré à pfSense. Toutes les configurations faîtes graphiquement sur pfSense sont traduites en un fichier de configuration, qui peut être copié pour une une installation indépendante de HAProxy.