Installation, demande et configuration de certificat Let’s Encrypt avec Apache (CentOS 7.2)

Let’s Encrypt est une autorité de certification indépendante fourni par l’Internet Security Research Group (ISRG). Elle a pour but de généraliser l’usage de connexions sécurisées (https) en fournissant des certificats SSL gratuit.

Récupération des sources du client Let’s Encrypt

Aucun package n’étant disponible pour le moment dans les dépots CentOS, nous devons récupérer les sources du client depuis les dépôts Github. Pour cela nous devons installer le client Git, donc nous allons taper la commande suivante :

1
# yum install git

Le client Git étant installé, nous allons récupérer les sources via les commandes suivantes :

1
2
# cd /opt/
# git clone https://github.com/letsencrypt/letsencrypt

Nous avons récupérer les sources, avant de pouvoir faire une demande de certificat, nous devons installer les dépendances nécessaires. Pour cela nous allons taper la commande suivante :

1
# /opt/letsencrypt/letsencrypt-auto

Génération des certificats

Afin de pouvoir faire une demande de certificat, nous devons préalablement arrêter notre serveur web, ici Apache. Pour cela nous tapons les commandes suivantes :

1
# systemctl stop httpd

Nous allons maintenant pour lancer la génération de notre certificat via la commande suivante :

1
/opt/letsencrypt/letsencrypt-auto certonly --email letsencrypt@monsiteweb.fr --domain monsiteweb.org --domain www.monsiteweb.fr --agree-tos --rsa-key-size 4096 --standalone
  • certonly : Pour obtenir le certificat sans l’installer automatiquement
  • email : On indique l’adresse mail de contact (Doit être valide)
  • domain : On indique le(s) domaine(s) pour le(s)quel(s) on demande un certificat
  • agree-tos : On accepte les conditions d’utilisations
  • rsa-key-size : On défini la taille de la clé à 4096 bits (Par défaut : 2048 bits)
  • standalone : Utilise son propre serveur pour valider l’appartenance du domaine

La commande génère 4 fichiers dans le dossier /etc/letsencrypt/live/monsiteweb.fr/

  • cert.perm : Contient le certificat principal
  • chain.pem : Contient la chaine de certificats supplémentaires
  • fullchain.pem : Contient le certificat principal ainsi que la chaine de certificats supplémentaires
  • privkey.pem : Contient la clé privé du certification

Configuration des certificats dans Apache

Pour activer le SSL dans Apache, nous allons éditer le fichier de configuration du vhost via la commande suivante :

1
# vi /etc/httpd/conf.d/monsiteweb.fr.conf

On modifie le fichier du vhost comme ci-dessous :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<VirtualHost *:80>
     ServerName www.monsiteweb.fr
     Redirect permanent / https://www.monsiteweb.fr/
</VirtualHost>

<VirtualHost *:443>
     SSLEngine on
     SSLCertificateFile /etc/letsencrypt/live/monsiteweb.fr/cert.pem
     SSLCertificateKeyFile /etc/letsencrypt/live/monsiteweb.fr/privkey.pem
     SSLCertificateChainFile /etc/letsencrypt/live/monsiteweb.fr/fullchain.pem
     SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
     SSLHonorCipherOrder on
     SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
     SSLCompression off
     SSLUseStapling on
     Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
     Header always set X-Frame-Options DENY
     Header always set X-Content-Type-Options nosniff
     ServerName www.monsiteweb.fr
     DocumentRoot /var/www/html/monsiteweb.fr/
     <Directory /var/www/html/monsiteweb.fr/>
          Options -Indexes +FollowSymLinks +MultiViews
          AllowOverride All
     </Directory>
     ErrorLog /var/log/httpd/monsiteweb.fr/error.log
     CustomLog /var/log/httpd/monsiteweb.fr/access.log combined
     ServerSignature Off
</VirtualHost>

On vérifie que l’on n’a pas fait d’erreur de syntaxe via la commande suivante :

1
# apachectl configtest

Maintenant que le certificat est généré et configuré, nous pouvons relancer Apache pour activer la nouvelle configuration. Pour cela nous allons taper la commande suivante :

1
# systemctl restart httpd.service

Script de renouvellement du certification

Actuellement les certificats générés ont une durée de validité de 90 jours. Afin d’automatiser le renouvellement du certificat, nous allons créer un script qui s’en chargera. Avant cela nous devons créer un fichier « monsiteweb.fr.ini » contenant tous les paramètres de renouvellement via les commandes suivantes :

1
2
# mkdir /etc/letsencrypt/config_renew/
# vi /etc/letsencrypt/config_renew/monsiteweb.fr.ini

On y ajoute les lignes suivantes :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# On indique l’adresse mail de contact (Doit être valide)
email = letsencrypt@monsiteweb.fr
# On indique le(s) domaine(s) pour le(s)quel(s) on demande un certificat
domains = monsiteweb.fr,www.monsiteweb.fr
# On accepte les conditions d’utilisations
agree-tos = True
# On défini la taille de la clé à 4096 bits (Par defaut : 2048 bits)
rsa-key-size = 4096
authenticator = webroot
On indique le répertoire racine du site web
webroot-path = /var/www/html/www.monsiteweb.fr/
text = True
renew-by-default = True

Maintenant nous pouvons créer le script de renouvellement du certificat via la commande suivante :

1
# vi /etc/cron.daily/letsencrypt_renewal_cert.sh

On y ajoute les lignes suivantes :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
if ! openssl x509 -checkend 604800 -noout -in /etc/letsencrypt/live/monsiteweb.fr/cert.pem
then
/opt/letsencrypt/letsencrypt-auto certonly --config /etc/letsencrypt/config_renew/monsiteweb.fr.ini
renew=1
fi

if [[ $renew ]];
then
systemctl reload httpd
fi

Le script sera exécuté tous les jours. Il vérifiera si le certificat dans moins de 7 jours. Si c’est le cas, une demande de renouvellement de certificat sera effectué. Une fois ce dernier renouvelé, le script recharge le daemon Apache pour prendre en compte le nouveau certificat.