Plus d’excuse pour ne pas utiliser https

Contexte

Même si je n’ai « rien à cacher », je n’aime pas particulièrement être espionné. Les récentes lois sur le renseignement m’ont donc incité à regarder les différentes solutions de sécurisation de l’information (bien que je ne les ai pas toutes mises en œuvre). En vrac donc : gestionnaire de mots de passe (KeePass), système de cryptage du disque dur (VeraCrypt), VPN, etc.

Concernant ce blog, je voulais depuis longtemps le migrer en https, mais sans franchir le pas, ne voulant pas ajouter un nouvel abonnement payant à la liste des frais récurrents (même si le coût était modeste : 1€/mois chez Gandi pour un certificat simple, par exemple).

Hier, Let’s encrypt est passé en béta publique. Cette autorité de certification a pour vocation de démocratiser l’utilisation du protocole https, en fournissant gratuitement des certificats. Je n’avais donc plus d’excuse, et ai donc effectué la manipulation.

Celle-ci est particulièrement simple, Let’s encrypt fournissant un client open-source en ligne de commande, pour automatiser la génération des certificats.

Marche à suivre

Voici la procédure pour migrer pas à pas un serveur Nginx de http à https :

On récupère le client :

1
git clone https://github.com/letsencrypt/letsencrypt

Pour générer les certificats, le serveur Let’s encrypt a besoin de communiquer avec le client sur les ports 80 et 443. Il faut donc s’assurer que ces ports sont ouverts sur le pare-feu, et qu’aucun service n’écoute sur un de ces ports. Par exemple, dans mon cas :

1
2
3
4
5
# Le serveur Nginx occupait le port 80.
systemctl stop nginx.service
# Le port 443 n'était pas ouvert.
firewall-cmd --zone=public --permanent --add-service=https
systemctl reload firewalld.service

On peut alors générer les certificats dont on a besoin :

1
./letsencrypt-auto certonly -d courtine.org -d www.courtine.org -d blog.courtine.org --rsa-key-size 4096

Il suffit alors de modifier le fichier de configuration Nginx :

  • Remplacement du port 80 par le port 443.
  • Ajout des directives « ssl », « ssl_certificate », et « ssl_certificate_key ».

On obtient :

1
2
3
4
5
6
7
8
server {
    listen       443 default;
    server_name  blog.courtine.org;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/courtine.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/courtine.org/privkey.pem;
    # Reste de la configuration
}

Enfin, on recrée un serveur écoutant sur le port 80, et redirigeant tout le trafic sur le port 443 :

1
2
3
4
5
server {
    listen       80 default;
    server_name  blog.courtine.org;
    rewrite      ^ https://$server_name$request_uri? permanent;
}

Il ne reste plus qu’à relancer le serveur :

1
systemctl start nginx.service

Conclusion

La procédure a finalement été beaucoup plus simple que je l’imaginais. Il n’y a donc vraiment plus aucune excuse pour ne pas se lancer…

Pour aller un peu plus loin dans la sécurisation de son serveur, vous pouvez utiliser la configuration décrite dans cet article : https://memo-linux.com/configurer-le-serveur-web-nginx-en-https-avec-letsencrypt-sous-debian-jessie/.

À propos de Benoît Courtine

Open Source enthousiast, and CTO at Alcion Group.
Ce contenu a été publié dans Vie du blog. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

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

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.