[Technique] Comment sécuriser Apache avec Let’s Encrypt sous ​​Ubuntu

Comment sécuriser Apache avec Let’s Encrypt sous Ubuntu

Difficultée : star-icone-4334-64

Introduction

Dans ce billet je vais vous expliquer comment mettre en place un certificat TLS/SSL Let’s Encrypt sur un serveur Ubuntu exécutant Apache2

Nous aborderons également comment automatiser le processus de renouvellement du certificat en utilisant une tâche planifiée (cron) .

Les certificats SSL sont utilisés sur les serveurs web afin de chiffrer le trafic entre le serveur et le client, offrant une sécurité supplémentaire pour les utilisateurs accédant à votre application ou site internet.

Let’s Encrypt fournit un moyen facile d’ obtenir et d’installer des certificats approuvés gratuitement.

J’avais déjà parlé de Let’s Encrypt dans un précédent billet, disponible : ici

Vous avez peut-être constaté que ce blog utilise un certificat Let’s encrypt 😉

Prérequis

Vous aurez besoin :

  • Un serveur Ubuntu 14.04 LTS : pour la version ultérieure (16.04 LTS) Let’s Encrypt est présent dans les dépôts officiels
  • Le serveur web Apache2 installé avec un ou plusieurs domaine configurés correctement (ex:dinfadom.com, blog.dinfadom.com etc.)
  • Droits administrateur (root) ou sudo

Étape 1 – Installer les dépendances :

fpicard@ubuntu:$ sudo apt-get update
fpicard@ubuntu:$ sudo apt-get install git tree

Étape 2 – Télécharger le client Let’s Encrypt

fpicard@ubuntu:$ sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Étape 3 – Configuration et création d’un certificat SSL

La génération du certificat SSL pour Apache en utilisant le client de Let’sEncrypt est assez simple.
Let’sEncrypt génère et installe automatiquement un nouveau certificat SSL valable pour les domaines fournis (en paramètres)

Il se basera sur vos ‘virtualhost’ actifs apache2 situé par défaut /etc/apache2/sites-available et par défaut /etc/apache2/sites-enabled/ (une fois activé via la commande a2enssite)

Étant un gros flemmard, je vais utiliser l’assistant de création (l’installation dites « interactive »), toute la beauté de Let’s Encrypt réside ici

Accéder au répertoire de Let’s Encrypt :

fpicard@ubuntu:$ cd /opt/letsencrypt

Pour exécuter l’installation interactive et obtenir un certificat qui ne couvre qu’un seul domaine , exécutez la commande letsencrypt -auto avec votre domaine, comme suivant l’exemple:

fpicard@ubuntu:$ sudo ./letsencrypt-auto --apache -d dinfadom.com

Si vous souhaitez installer un seul certificat valable pour plusieurs domaines ou sous-domaines, vous pouvez les ajouter en paramètres complémentaires à la commande .

Le premier nom de domaine dans la liste des paramètres sera le domaine principal utilisé par Let’s Encryp pour créer le certificat.

Je vous recommande donc de passer en paramètre le domaine principal suivi de(s) domaine(s) secondaire(s) ou sous-domaine(s) souhaité comme suivant l’exemple :

fpicard@ubuntu:$ sudo ./letsencrypt-auto --apache -d dinfadom.com -d blog.dinfadom.com

Après les dépendances installées, un assistant vous guidera étape par étape pour personnaliser vos options de certificat . Il vous sera demandé de fournir une adresse e-mail (valide) pour la l’enregistrement, le tag de vos certificats auprès de Let’s Encrypt et avis de clé perdue, vous serez ensuite en mesure de choisir deux options (EN)

  • both http and https : votre site sera donc accessible via http et https
  • force all requests to redirect to https : votre site sera donc accessible via https uniquement et les requêtes ‘http’ seront redirigés vers ‘https’ – bien plus secure ! 😀

Lorsque l’installation est terminée , les fichiers de certificats (chaines) générés seront stocké ici : /etc/letsencrypt/live/

fpicard@ubuntu:$ tree /etc/letsencrypt/live/
.
├── blog.dinfadom.com
│ ├── cert.pem -> ../../archive/blog.dinfadom.com/cert1.pem
│ ├── chain.pem -> ../../archive/blog.dinfadom.com/chain1.pem
│ ├── fullchain.pem -> ../../archive/blog.dinfadom.com/fullchain1.pem
│ └── privkey.pem -> ../../archive/blog.dinfadom.com/privkey1.pem
├── dinfadom.com
│ ├── cert.pem -> ../../archive/dinfadom.com/cert1.pem
│ ├── chain.pem -> ../../archive/dinfadom.com/chain1.pem
│ ├── fullchain.pem -> ../../archive/dinfadom.com/fullchain1.pem
│ └── privkey.pem -> ../../archive/dinfadom.com/privkey1.pem

Vous pouvez vérifier l’état de votre certificat SSL à l’aide du lien suivant (ne pas oublier de remplacer blog.dinfadom.com avec votre domaine de principal ou sous domaine dans l’URL qui suit ) :

https://www.ssllabs.com/ssltest/analyze.html?d=blog.dinfadom.com&latest

Screenshot :

Capture d’écran 2016-09-01 à 19.33.16

Étape 4 – Renouvellement automatique

Les certificats Let’s Encrypt sont valables pendant 90 jours , mais il est recommandé les renouveler tous les 60 jours (pour garder une marge d’erreur).

Le client Let’s Encrypt est fournis avec une commande qui vérifie automatiquement les certificats installés et tente de les renouveler si elles sont moins de 30 jours de date d’expiration.

Pour déclencher le processus de renouvellement pour tous les domaines installés , vous devez exécuter :

fpicard@ubuntu:$ sudo ./letsencrypt-auto renew

Vu que nous avons récemment installé un certificat, la commande ne vérifier la date d’expiration et imprimer un message informant que le certificat n’est pas a renouveler pour le moment.

La sortie devrait ressembler à ceci :

fpicard@ubuntu:$ sudo ./letsencrypt-auto renew

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/blog.dinfadom.com.conf
-------------------------------------------------------------------------------

2016-09-01 15:48:57,350:WARNING:certbot.renewal:renewal config file {} is missing a required file reference
2016-09-01 15:48:57,351:WARNING:certbot.renewal:Renewal configuration file /etc/letsencrypt/renewal/dinfadom.com.conf is broken. Skipping.

The following certs are not due for renewal yet:
/etc/letsencrypt/live/blog.dinfadom.com/fullchain.pem (skipped)
No renewals were attempted.

Additionally, the following renewal configuration files were invalid:
/etc/letsencrypt/renewal/dinfadom.com.conf (parsefail)
0 renew failure(s), 1 parse failure(s)

le meilleur moyen pour vous assurer que vos certificats ne deviennent pas obsolètes est de créer une tâche planifiée (cron) qui s’exécute régulièrement.

Nous allons modifier le crontab pour créer une nouvelle tache qui s’exécutera chaque semaine.

Pour modifier le crontab pour l’utilisateur root , exécutez :

fpicard@ubuntu:$ sudo crontab -e

Ajoutez :

# Renouvellement automatique tous les lundi à 2:30 (am)
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log

Sauvegarder et quitter.

Vous venez de créer un renouvellement automatique tous les lundis à 02h30 .
La sortie produite par la commande sera acheminée vers un fichier journal situé à /var/log/le-renewal.log

Étape 5 – garder le client Let’s encrypt à jour (optionnel)

Chaque fois que de nouvelles mises à jour sont disponibles pour le client, vous pouvez mettre à jour votre copie locale en exécutant un git pull à l’intérieur du répertoire Let’s Encrypt :

fpicard@ubuntu:$ cd /opt/letsencrypt
fpicard@ubuntu:$ sudo git pull

Conclusion

Dans ce post, nous avons vu comment installer un certificat SSL gratuit à partir de Let’s Encrypt permettant de sécuriser notre site web ou notre application web (ex: wiki) à l’aide du protocole de sécurité TLS/SSL.

Vous aimerez aussi...