Passer son serveur Apache en HTTPS avec Let’s Encrypt

Je vais expliquer les différentes étapes pour passer un serveur Apache en HTTPS grâce à Let’s Encrypt.

Toutes les opérations vont se passer dans une console sur le serveur Linux en mode root. J’utilise ici une Debian 7.10 « Wheezy ».

Je me suis aidé de cet article en anglais.

  1. Commencer par nettoyer le contenu de /etc/apache2/sites-available/ en supprimant tous les fichiers inutiles
  2. Aller dans /root
  3. Installer git (s’il n’est pas déjà installer) : $ apt-get install git
  4. Ensuite on tape les commandes suivantes :
    • $ git clone https://github.com/letsencrypt/letsencrypt
    • $ cd letsencrypt
    • $ ./letsencrypt-auto --help
  5. Plusieurs programmes vont s’installer.
  6. Maintenant on tape : $ ./letsencrypt-auto --apache
  7. Si vous obtenez l’erreur Apache plugin support requires libaugeas0 and augeas-lenses version 1.2.0 or higher, please make sure you have you have those installed. alors il va falloir utiliser un backport debian repositories :
    • On commence par éditer le fichier /etc/apt/sources.list en y ajoutant la ligne deb http://ftp.debian.org/debian wheezy-backports main
    • Puis on tape $ apt-get update
    • Et ensuite $ apt-get install -t wheezy-backports libaugeas0 augeas-lenses
    • On peut maintenant refaire $ ./letsencrypt-auto --verbose --apache
  8. Une boite de dialogue s’ouvre vous indiquant les domaines trouvés sur votre machine. Par défaut ils sont tous cochés. Suivez les instructions
  9. Une fois fait, si vous avez l’erreur urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Failed to connect to host for DVSNI challenge il peut y avoir plusieurs raisons… Pour ma part c’était le firewall qui bloquait le port 443
  10. Ou si vous avez une erreur liée à un domaine, assurez-vous que celui-ci pointe bien vers votre box en utilisant la commande nslookup -debug blog.kodono.info 8.8.8.8

Vous devriez maintenant avoir accès à votre site web avec https.

Attention car le certificat Let’s Encrypt expire après 90 jours. Il va donc falloir mettre en place un cron job. On peut prendre celui de https://thealphanerd.io/blog/securing-apache-and-znc-with-letsencrypt/ :

#!/bin/sh
if ! /path/to/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
  echo Automated renewal failed:
  cat /var/log/letsencrypt/renew.log
  exit 1
fi

On va le placer dans /etc/cron.daily/update-certs (avec les droits 755), et le cron va s’en occuper tout seul.

Si vous continuez à autoriser le HTTP et le HTTPS, alors, pour éviter le mixed content (c’est-à-dire du contenu http qui est appelé sur votre site https) on peut se la jouer brut-force en utilisant un module d’Apache qui va modifier le contenu des pages avant de les renvoyer. À mon sens cela devrait être temporaire, le temps de modifier tous vos fichiers.

  1. On va commencer par installer le module substitude: a2enmod substitute
  2. Ensuite on utilise le nouveau module pour remplacer les http://notresite en https://notresite, ainsi que les liens extérieurs de http:// en //. Pour cela on modifie nos fichiers .conf dans /etc/apache2/sites-available/ en y ajoutant :
 <Location />
 <If "%{SERVER_PORT} == 443">
 AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html text/plain text/xml
 Substitute "s|action=\"http:|action=\"|"
 Substitute "s|action='http:|action='|"
 Substitute "s|src=\"http:|src=\"|"
 Substitute "s|src='http:|src='|"
 Substitute "s|href=\"http:|href=\"|"
 Substitute "s|href='http:|href='|"
 <If>
</Location>

J’utilise <If "%{SERVER_PORT} == 443"> pour n’enclencher la substitution que lorsqu’on demande de l’HTTPS.
Et on oubliera pas de faire un apache2ctl configtest pour vérifier que tout est bon, puis un service apache2 reload pour prendre en compte les modifications !

1 avis sur “Passer son serveur Apache en HTTPS avec Let’s Encrypt

  1. Chris

    Merci pour le post! la partie sur « Apache plugin support requires libaugeas0 and augeas-lenses version 1.2.0 or higher, please make sure you have you have those installed. » m’a bien aidé !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*