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.
- Commencer par nettoyer le contenu de
/etc/apache2/sites-available/
en supprimant tous les fichiers inutiles - Aller dans
/root
- Installer git (s’il n’est pas déjà installer) :
$ apt-get install git
- Ensuite on tape les commandes suivantes :
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help
- Plusieurs programmes vont s’installer.
- Maintenant on tape :
$ ./letsencrypt-auto --apache
- 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 lignedeb 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
- On commence par éditer le fichier
- 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
- 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
- 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.
- On va commencer par installer le module substitude:
a2enmod substitute
- Ensuite on utilise le nouveau module pour remplacer les
http://notresite
enhttps://notresite
, ainsi que les liens extérieurs dehttp://
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 !
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é !