Comment sécuriser Apache avec Let's Encrypt sur Ubuntu 18.04

Introduction

Let’s Encrypt est une autorité de certification (CA) qui offre un moyen simple d’obtenir et d’installer des certificats TLS / SSL gratuits, permettant ainsi le chiffrement HTTPS sur les serveurs Web. Il simplifie le processus en fournissant un client logiciel, Certbot, qui tente d'automatiser la plupart (sinon la totalité) des étapes requises. Actuellement, l'ensemble du processus d'obtention et d'installation d'un certificat est entièrement automatisé sur Apache et Nginx.

Let’s Encrypt - Certificats SSL/TLS gratuits
Let’s Encrypt est une autorité de certification gratuite, automatisée et ouverte mise à votre disposition par la société d’utilité publique Internet Security Research Group (ISRG).

Dans ce tutoriel, vous utiliserez Certbot pour obtenir un certificat SSL gratuit pour Apache sur Ubuntu 18.04 et configurer votre certificat pour qu'il se renouvelle automatiquement.

💡
Cet article ainsi que plusieurs autres publiés sous la rubrique Ubuntu proposent de nombreux tutoriels sur la mise en place d'un serveur Ubuntu, sa configuration et les applications associées.

Ce didacticiel utilisera un fichier hôte virtuel Apache distinct au lieu du fichier de configuration par défaut. Nous vous recommandons de créer de nouveaux fichiers d'hôte virtuel Apache pour chaque domaine, car cela permet d'éviter les erreurs courantes et de conserver les fichiers par défaut en tant que configuration de secours.

Prérequis

  • Un serveur Ubuntu 18.04 configuré en suivant cette configuration de serveur initiale pour le didacticiel Ubuntu 18.04, y compris un utilisateur sudo non root et un pare-feu.
  • Un nom de domaine entièrement enregistré. Ce tutoriel utilisera votre_domaine comme exemple tout au long. Vous pouvez acheter un nom de domaine sur le registraire de domaine de votre choix.
  • Les deux enregistrements DNS suivants sont configurés pour votre serveur.
    • Un enregistrement A avec votre_domaine pointant vers l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.votre_domaine pointant vers l'adresse IP publique de votre serveur.
  • Apache installé en suivant Comment installer et configurer le serveur Web Apache sur Ubuntu 18.04. Assurez-vous que vous disposez d'un fichier hôte virtuel pour votre domaine. Ce tutoriel utilisera /etc/apache2/sites-available/votre_domaine.conf comme exemple.

Étape 1 — Installez Certbot

La première étape pour utiliser Let’s Encrypt afin d'obtenir un certificat SSL consiste à installer le logiciel Certbot sur votre serveur.

Certbot est en développement très actif, de sorte que les paquets Certbot fournis par Ubuntu ont tendance à être obsolètes. Cependant, les développeurs Certbot gèrent un référentiel de logiciels Ubuntu avec des versions à jour, nous allons donc utiliser ce référentiel à la place.

Tout d'abord, ajoutez le référentiel au système:

$ sudo add-apt-repository ppa:certbot/certbot

Vous devrez appuyer sur ENTRÉE pour accepter.

Installez le paquet Apache de Certbot avec apt:

$ sudo apt install python-certbot-apache

Certbot est maintenant prêt à être utilisé, mais pour qu'il puisse configurer SSL pour Apache, nous devons vérifier une partie de la configuration d'Apache.

Étape 2 — Configurez le certificat SSL

Certbot doit pouvoir trouver le bon hôte virtuel dans votre configuration Apache pour qu'il puisse configurer automatiquement SSL. Plus précisément, il le fait en recherchant la directive ServerName qui correspond au domaine pour lequel vous demandez un certificat.

Pour vérifier, ouvrez le fichier d'hôte virtuel de votre domaine à l'aide de nano ou de votre éditeur de texte préféré:

$ sudo nano /etc/apache2/sites-available/votre_domaine.conf

Recherchez la ligne ServerName existante. Ça devrait ressembler à ceci :

...
ServerName votre_domaine;
...

Si c'est le cas, quittez votre éditeur et passez à l'étape suivante.

Si ce n'est pas le cas, mettez-le à jour pour qu'il corresponde. Enregistrez ensuite le fichier, quittez votre éditeur et vérifiez la syntaxe de vos modifications de configuration:

$ sudo apache2ctl configtest

Si vous obtenez une erreur, éditer de nouveau le fichier d'hôte virtuel et recherchez les fautes de frappe ou les caractères manquants. Une fois la syntaxe de votre fichier de configuration correcte, rechargez Apache pour charger la nouvelle configuration:

$ sudo systemctl reload apache2

Certbot peut maintenant trouver le bon bloc VirtualHost et le mettre à jour.

Étape 3 — Autoriser HTTPS à travers le pare-feu

Activez le module mod_ssl d'Apache en utilisant la commande suivante :

$ sudo a2enmod ssl

Étape 4 — Obtention d'un certificat SSL

Certbot fournit une variété de moyens pour obtenir des certificats SSL via des plugins. Le plugin Apache se chargera de reconfigurer Apache et de recharger la configuration chaque fois que nécessaire. Pour utiliser ce plugin, saisissez ce qui suit:

$ sudo certbot --apache -d votre_domaine -d www.votre_domaine

Cela exécute certbot avec le plug-in --apache, en utilisant -d pour spécifier les noms pour lesquels vous souhaitez que le certificat soit valide.

Si c'est la première fois que vous exécutez certbot, vous serez invité à entrer une adresse e-mail et à accepter les conditions d'utilisation. Après cela, certbot communiquera avec le serveur Let’s Encrypt, puis lancera un défi pour vérifier que vous contrôlez le domaine pour lequel vous demandez un certificat.

Si cela réussit, certbot vous demandera comment vous souhaitez configurer vos paramètres HTTPS:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Sélectionnez votre choix puis appuyez sur ENTRÉE. La configuration sera mise à jour et Apache se rechargera pour récupérer les nouveaux paramètres. certbot se terminera par un message vous informant que le processus a réussi et où vos certificats sont stockés:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/your_domain/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/your_domain/privkey.pem
   Your cert will expire on 2018-07-23. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Vos certificats sont téléchargés, installés et chargés. Essayez de recharger votre site Web à l'aide de https: // et notez l'indicateur de sécurité de votre navigateur.

Il est recommandé de configurer la renouvellement automatique de votre certificat SSL avec Let's Encrypt pour éviter qu'il n'expire. Vous pouvez le faire en utilisant la commande suivante :

sudo certbot renew --dry-run

Cette commande vérifiera si votre certificat a besoin d'être renouvelé et le renouvellera si nécessaire. Vous pouvez ajouter cette commande à votre crontab pour qu'elle soit exécutée régulièrement.