Base documentaire GNU/Linux et développement

Fiches techniques pour la configuration de machines GNU/Linux, de réseau et de développement logiciel

Outils pour utilisateurs

Outils du site


administration-systemes:certbot-multi-domaine

Gestion de certificats TLS avec Certbot

Let’s Encrypt est une autorité de certification publique délivrant des certificats TLS pour les demandeurs de façon automatisée, via des clients communiquant avec son API par le protocole ACME. Les mécanismes de fonctionnement sont décris sur leur site internet. Les changements dans la spécification sont nombreux et ACME est toujours à l’état de brouillon pour l’IETF.

Certbot est un client développé par l’Electronic Frontier Foundation permettant de dialoguer avec l’autorité et donc de générer des certificats. La gestion des demandes avec Cerbot se fait en choisissant différents greffons proposant des défis permettant de valider l’identité de l’emmetteur.

Pré-requis

Certbot est présent dans le dépôt EPEL fourni par la communauté Fedora pour CentOS. Il peut s’installer comme suit :

yum install epel-release
yum install certbot

Certbot et LetsEncryt

Les greffons

Différents greffons sont disponibles pour demander un certificat pour un domaine :

  • apache et nginx : automatise la récupération et l’installation d’un certificat pour Apache ou nginx ;
  • webroot : récupère un certificat depuis la racine du serveur web (utile dans le cas d’un hébergement partagé) ;
  • standalone : utilise un serveur web autonome pour communiquer avec l’autorité. Il utilise le port 80 ou 443, et tout autre serveur utilisant ces ports doit être éteint.
  • dns : modification des enregistrements DNS pour prouver que l’on est propriétaire de la zone ;
  • manual : le processus est indiqué manuellement à l’utilisateur.

Pour des raisons de simplicité, j’utilise le greffon standalone pour garder le contrôle sur l’installation des certificats sur les différents serveurs.

Les défis

Avec chacun des greffons viennent des défis qu’il faut réussir pour prouver que l’on est le propriétaire des noms de domaine pour lesquels émettre des certificats. Pour la première version de Let’s Encrypt, seulement trois sont disponibles :

  • http-01 : le client prouve à l’autorité qu’il contrôle les fichiers distribués sur le serveur web pointé par le nom de domaine à valider ;
  • dns-01 : le client informe l’utilisateur qu’il doit ajouter un champ TXT dans les enregistrements DNS pour prouver son contrôle du domaine ;
  • tls-sni-01 : prouve le contrôle du domaine en imposant au client de configurer un serveur TLS pointé par un enregistrement A ou AAAA en utilisant l’extension SNI.

Configuration et génération d’un certificat

Fichier de configuration pour un domaine

La configuration pour Certbot peut être gérée par un fichier de configuration. Tous les paramètres de la ligne de commande peuvent être placés dans ces fichiers. Ils sont au format .ini. Par défaut, Certbot recherche les fichiers /etc/letsencrypt/cli.ini , $XDG_CONFIG_HOME/letsencrypt/cli.ini . Il est possible d’indiquer à Certbot d’utiliser un fichier autre avec l’argument -c.

Le contenu ci-dessous est ajouté au fichier wiki.guillaume-bernard.fr.ini.

# Définir la taille des clefs RSA à générer (2048 par défaut)
rsa-key-size = 4096

# E-mail de la personne à contacter en cas de problème
email = mon-mail AT guillaume-bernard POINT fr

# Méthode d'authentification pour le protocole ACME
authenticator = standalone
preferred-challenges = tls-sni-01

# Les domaines à couvrir
domains = wiki.guillaume-bernard.fr

# Interface texte uniquement
text = True

# Valider les conditions d’utilisation du service automatiquement
agree-tos = True

Génération de certificat

Puisque le greffon utilisé est standalone, si un serveur Web occupe déjà les ports 80 et, ou 443, il va falloir le stopper :

systemctl stop httpd

certonly est un argument permettant de choisir des méthodes d’authentification ne permettant que la récupération d’un certificat validé par l’autorité. Il existe également install qui modifie la configuration des serveurs web pour installer les certificats générés. Les certificats générés, signés, la clef privée et la chaîne complète sont dans le répertoire /etc/letsencrypt/live

certbot certonly -c wiki.guillaume-bernard.fr.ini

On peut enfin redémarrer le serveur Web, s’il y en avait un :

systemctl start httpd

Renouvellement de certificat

Les fichiers de configuration pour les demandes de renouvellement sont placés dans /etc/letsencrypt/renewal . Par défaut, la durée de validité des certificats est de quatre-vingt dix jours. Il faut donc penser à les renouveler régulièrement. Le renouvellement des certificats se base sur ces fichiers de configuration, et s’opère comme suit :

certbot renew

Si les certificats sont loin de la date d’expiration, rien ne sera fait.

Installation avec Apache

Pour la configuration d’un hôte virtuel Apache, il suffit d’ajouter les directives SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile à la configuration :

SSLCertificateFile /etc/letsencrypt/live/wiki.guillaume-bernard.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/wiki.guillaume-bernard.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/wiki.guillaume-bernard.fr/chain.pem

Le renouvellement automatisé ne demandera aucune intervention de la part de l’administrateur, car les anciens certificats seront archivés, et les nouveaux les remplaceront dans live.

administration-systemes/certbot-multi-domaine.txt · Dernière modification: 2018/04/03 14:47 par Guillaume Bernard