100 lines
3.3 KiB
Markdown
100 lines
3.3 KiB
Markdown
---
|
|
categories: web security
|
|
title: Howto Let's Encrypt
|
|
...
|
|
|
|
* Documentation : <https://letsencrypt.org/docs/>
|
|
* Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/revisions/unstable/show/evoacme>
|
|
|
|
Let's Encrypt est l'autorité de certification a l'origine du protocole ACME, elle permet l'obtention de certificat SSL gratuit de manière automatisé.
|
|
|
|
Un client ACME est nécessaire pour communiquer avec les serveurs de Let's Encrypt et obtenir un certificat. Il en existe plusieurs.
|
|
|
|
## Client officiel (Certbot)
|
|
|
|
[Certbot](https://certbot.eff.org/) est le client officiel de Let's Encrypt, il est disponible en paquet sous Debian à partir des backports de Jessie.
|
|
|
|
Pour l'installer sous Jessie, il faut avoir activé les backports, puis :
|
|
|
|
~~~
|
|
apt install certbot -t jessie-backports
|
|
~~~
|
|
|
|
### Création d'un utilisateur dédié
|
|
|
|
Afin de ne pas faire tourner certbot avec l'utilisateur root et de ne pas lui donner accès aux clés SSL, nous allons faire tourner certbot avec un utilisateur dédié.
|
|
|
|
Premièrement, il faut supprimer la tâche cron par défaut du paquet certbot qui est lance la commande certbot en root :
|
|
|
|
~~~
|
|
rm /etc/cron.d/certbot
|
|
~~~
|
|
|
|
Ensuite on crée un utilisateur dédié à certbot (ici "acme") et on corrige les droits en conséquence :
|
|
|
|
~~~
|
|
useradd acme -d /etc/letsencrypt
|
|
mkdir -p /etc/letsencrypt /var/log/letsencrypt /var/lib/letsencrypt
|
|
chmod 755 /etc/letsencrypt /var/log/letsencrypt /var/lib/letsencrypt
|
|
chown acme: /etc/letsencrypt /var/log/letsencrypt /var/lib/letsencrypt
|
|
~~~
|
|
|
|
### Configuration du Serveur Web
|
|
|
|
#### Apache
|
|
|
|
Créer le fichier /etc/apache2/conf-available/letsencrypt.conf avec :
|
|
|
|
~~~
|
|
SetEnvIf Request_URI "/.well-known/acme-challenge/*" no-jk
|
|
Alias /.well-known/acme-challenge /var/lib/letsencrypt/.well-known/acme-challenge
|
|
<Directory "/var/lib/letsencrypt/.well-known/acme-challenge">
|
|
Options -Indexes
|
|
Allow from all
|
|
Require all granted
|
|
</Directory>
|
|
~~~
|
|
|
|
Puis activer ce fichier :
|
|
|
|
~~~
|
|
ln -s /etc/apache2/conf-available/letsencrypt.conf /etc/apache2/conf-enabled/letsencrypt.conf
|
|
apache2ctl -t
|
|
service apache2 reload
|
|
~~~
|
|
|
|
#### Nginx
|
|
|
|
Créer le fichier /etc/nginx/letsencrypt.conf :
|
|
|
|
~~~
|
|
location /.well-known/acme-challenge {
|
|
alias /var/lib/letsencrypt/.well-known/acme-challenge;
|
|
try_files $uri =404;
|
|
allow all;
|
|
}
|
|
~~~
|
|
|
|
Il faudra ensuite inclure ce fichier dans chaque vhost utilisant Let's Encrypt.
|
|
|
|
### Génération du certificat
|
|
|
|
Générér une clé SSL dans /etc/ssl/private et un CSR (voir [HowtoSSL](http://wiki.evolix.org/HowtoSSL)) :
|
|
|
|
~~~
|
|
openssl req -newkey rsa:2048 -sha256 -nodes -keyout /etc/ssl/private/ma-cle.ssl -out mon-csr.csr
|
|
~~~
|
|
|
|
Faire la demande de certificat (avec l'utilisateur acme, le csr doit être accessible en lecture à cet utilisateur) :
|
|
|
|
~~~
|
|
sudo -u acme certbot certonly --webroot --csr mon-csr.csr --webroot-path /var/lib/letsencrypt -n --agree-tos --cert-path=/etc/letsencrypt/mon-cert.crt --fullchain-path=/etc/letsencrypt/mon-cert-fullchain.pem --chain-path=/etc/letsencrypt/mon-cert-chain.pem email@example.com
|
|
~~~
|
|
|
|
Votre certificat est maintenant présent dans /etc/letsencrypt/mon-cert.crt !
|
|
|
|
## Automatisation
|
|
|
|
Pour simplifier l'installation et la configuration de Certbot ainsi que la génération de CSR et de certificat, Evolix a créé le projet [Evoacme](https://forge.evolix.org/projects/ansible-roles/repository/revisions/unstable/show/evoacme).
|
|
|