Installer et configurer un certificat Let’s Encrypt

Let’s Encrypt propose un client pour la mise en place et le renouvellement des certifications mais celui-ci doit avoir les droits root sur le serveur et il modifie la configuration du serveur web automatiquement.

Il existe beaucoup d’alternatives, celle que nous allons utiliser est un script shell nommé dehydrated.

Cet article est une traduction adaptée de Simple Let’s Encrypt on Debian/Apache publié par Andreas Gohr, merci à lui pour l’article original.

Pré-requis Apache 

Activer le mod ssl :

a2enmod sslservice apache2 restart

Télécharger – Copier dans le presse-papier

Si on souhaite utiliser https sur plusieurs domaines hébergés par la machine, ne pas oublier d’ajouter la ligne NameVirtualHost *:443 dans /etc/apache2/ports.conf.

Installer et configurer dehydrated 

Récupérez les sources de l’outil pour l’installer dans /etc/ :

cd /etc/git clone https://github.com/lukas2511/dehydrated letsencryptcd letsencrypt

Télécharger – Copier dans le presse-papier

Créez un répertoire .acme-challenges qui permettra à l’émetteur du certificat de vérifier que les domaines à traiter vous appartiennent bien (ce répertoire doit donc être accessible à Apache).

mkdir .acme-challengesecho 'it works' > .acme-challenges/test.txtchown -R www-data:www-data .acme-challenges

Télécharger – Copier dans le presse-papier

Créez un alias pour que le répertoire .acme-challenges soit accessible pour chacun des domaines à traiter.

Apache 2.2

# /etc/apache2/conf.d/letsencryptAlias /.well-known/acme-challenge /etc/letsencrypt/.acme-challenges <Directory /etc/letsencrypt/.acme-challenges>        Options None        AllowOverride None        Order allow,deny        Allow from all</Directory>

Télécharger – Copier dans le presse-papier

service apache2 reload

Copier dans le presse-papier

Apache 2.4

# /etc/apache2/conf-available/letsencrypt.confAlias /.well-known/acme-challenge /etc/letsencrypt/.acme-challenges <Directory /etc/letsencrypt/.acme-challenges>	Options None	AllowOverride None	Require all granted</Directory>

Télécharger – Copier dans le presse-papier

a2enconf letsencryptservice apache2 reload

Télécharger – Copier dans le presse-papier

Vous pouvez vérifier que le répertoire est bien accessible en adaptant l’url suivante à votre domaine http://geodiversite.net/.well-known/acme-challenge/test.txt

Créez un fichier de configuration minimal pour le script afin de définir votre adresse email et l’emplacement du répertoire .acme-challenges :

# /etc/letsencrypt/configCONTACT_EMAIL=admin@site.bbWELLKNOWN="${BASEDIR}/.acme-challenges"

Télécharger – Copier dans le presse-papier

Pour finir, créez le fichier qui listera les domaines à traiter. Chaque ligne correspond à un domaine et ses alias :

# /etc/letsencrypt/domains.txtgeodiversite.net www.geodiversite.net

Télécharger – Copier dans le presse-papier

Création et renouvellement de certificat 

Pour créer ou renouveler les certificats des domaines, utilisez la commande suivante :

./dehydrated -c# INFO: Using main config file /etc/letsencrypt/config+ Generating account key...+ Registering account key with letsencrypt...Processing geodiversite.net with alternative names: www.geodiversite.net + Signing domains... + Creating new directory /etc/letsencrypt/certs/geodiversite.net ... + Generating private key... + Generating signing request... + Requesting challenge for geodiversite.net... + Requesting challenge for www.geodiversite.net... + Responding to challenge for geodiversite.net... + Challenge is valid! + Responding to challenge for www.geodiversite.net... + Challenge is valid! + Requesting certificate... + Checking certificate... + Done! + Creating fullchain.pem... + Done!

Télécharger – Copier dans le presse-papier

Si tout se passe bien comme ci-dessus, les certificats sont créés dans le répertoire /etc/letsencrypt/certs/. Il ne reste plus qu’à configurer Apache pour qu’il les utilise.

Voici un exemple de configuration pour debian stretch à placer dans le virtualhost de chaque domaine (geodiversite.net dans notre cas). Vous pouvez utiliser l’outil fourni par Mozilla pour générer une configuration adaptée à vos besoins.

<VirtualHost *:443>	# ...	SSLEngine On	SSLCertificateFile /etc/letsencrypt/certs/geodiversite.net/fullchain.pem	SSLCertificateKeyFile /etc/letsencrypt/certs/geodiversite.net/privkey.pem	SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1	SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384	SSLHonorCipherOrder off	SSLSessionTickets off 	Header always set Strict-Transport-Security "max-age=63072000"	# Optimisations optionnelles cf https://observatory.mozilla.org/	Header always set X-Content-Type-Options "nosniff"	Header always set X-XSS-Protection "1; mode=block"</VirtualHost>

Télécharger – Copier dans le presse-papier

Il ne reste plus qu’à mettre en place le renouvellement automatique des certificats et s’assurer qu’Apache recharge sa configuration à ce moment.

Créez un fichier /etc/letsencrypt/hook.sh.

#!/bin/bash if [ ${1} == "deploy_cert" ]; then    echo " + Hook: Restarting Apache..."    service apache2 reloadelse    echo " + Hook: Nothing to do..."fi

Télécharger – Copier dans le presse-papier

Rendez celui-ci exécutable et renseignez-le dans le fichier de configuration.

chmod 755 hook.shecho 'HOOK="${BASEDIR}/hook.sh"' >> config

Télécharger – Copier dans le presse-papier

Pour finir, ajoutez une tâche CRON dans /etc/cron.daily/letsencrypt pour l’exécuter quotidiennement (sans oublier de la rendre exécutable).

#!/bin/sh/etc/letsencrypt/dehydrated -c -g >> /var/log/letsencrypt.log 2>&1

Télécharger – Copier dans le presse-papier

Vous pouvez tester son bon fonctionnement en appelant /etc/cron.daily/letsencrypt.