Documentation technique : Debian
Documentation basée sur la distribution Debian

> > Installer et configurer un certificat Let’s Encrypt

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 :

  1. a2enmod ssl
  2. service apache2 restart

Télécharger

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/ :

  1. cd /etc/
  2. git clone https://github.com/lukas2511/dehydrated letsencrypt
  3. cd letsencrypt

Télécharger

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).

  1. mkdir .acme-challenges
  2. echo 'it works' > .acme-challenges/test.txt
  3. chown -R www-data:www-data .acme-challenges

Télécharger

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

Apache 2.2

  1. # /etc/apache2/conf.d/letsencrypt
  2. Alias /.well-known/acme-challenge /etc/letsencrypt/.acme-challenges
  3.  
  4. <Directory /etc/letsencrypt/.acme-challenges>
  5. Options None
  6. AllowOverride None
  7. Order allow,deny
  8. Allow from all
  9. </Directory>

Télécharger

  1. service apache2 reload

Apache 2.4

  1. # /etc/apache2/conf-available/letsencrypt.conf
  2. Alias /.well-known/acme-challenge /etc/letsencrypt/.acme-challenges
  3.  
  4. <Directory /etc/letsencrypt/.acme-challenges>
  5. Options None
  6. AllowOverride None
  7. Require all granted
  8. </Directory>

Télécharger

  1. a2enconf letsencrypt
  2. service apache2 reload

Télécharger

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 :

  1. # /etc/letsencrypt/config
  2. CONTACT_EMAIL=bruno@geodiversite.net
  3. WELLKNOWN="${BASEDIR}/.acme-challenges"

Télécharger

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

  1. # /etc/letsencrypt/domains.txt
  2. geodiversite.net www.geodiversite.net

Télécharger

Création et renouvellement de certificat

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

  1. ./dehydrated -c
  2. # INFO: Using main config file /etc/letsencrypt/config
  3. + Generating account key...
  4. + Registering account key with letsencrypt...
  5. Processing geodiversite.net with alternative names: www.geodiversite.net
  6. + Signing domains...
  7. + Creating new directory /etc/letsencrypt/certs/geodiversite.net ...
  8. + Generating private key...
  9. + Generating signing request...
  10. + Requesting challenge for geodiversite.net...
  11. + Requesting challenge for www.geodiversite.net...
  12. + Responding to challenge for geodiversite.net...
  13. + Challenge is valid!
  14. + Responding to challenge for www.geodiversite.net...
  15. + Challenge is valid!
  16. + Requesting certificate...
  17. + Checking certificate...
  18. + Done!
  19. + Creating fullchain.pem...
  20. + Done!

Télécharger

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 à placer dans le virtualhost de chaque domaine (geodiversite.net dans notre cas).

  1. <VirtualHost *:443>
  2. # ...
  3. SSLEngine On
  4. SSLCertificateFile /etc/letsencrypt/certs/geodiversite.net/cert.pem
  5. SSLCertificateKeyFile /etc/letsencrypt/certs/geodiversite.net/privkey.pem
  6. SSLCertificateChainFile /etc/letsencrypt/certs/geodiversite.net/chain.pem
  7. SSLCACertificateFile /etc/letsencrypt/certs/geodiversite.net/fullchain.pem
  8. SSLProtocol all -SSLv2 -SSLv3
  9. SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
  10. SSLHonorCipherOrder on
  11.  
  12. # Optimisations optionnelles cf https://observatory.mozilla.org/
  13. Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
  14. Header always set X-Content-Type-Options "nosniff"
  15. Header always set X-Frame-Options DENY
  16. Header always set X-XSS-Protection "1; mode=block"
  17. </VirtualHost>

Télécharger

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.

  1. #!/bin/bash
  2.  
  3. if [ ${1} == "deploy_cert" ]; then
  4. echo " + Hook: Restarting Apache..."
  5. service apache2 reload
  6. else
  7. echo " + Hook: Nothing to do..."
  8. fi

Télécharger

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

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

Télécharger

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

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

Télécharger

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

  • Auteur :
  • Publié le :

Aucun commentaire


Qui êtes-vous ?
  • [Se connecter]
Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.