Comment sécuriser Apache avec Let's Encrypt sur Debian 9

De Get Docs
Aller à :navigation, rechercher

Introduction

Let's Encrypt est une autorité de certification (CA) qui fournit un moyen facile 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.

Dans ce didacticiel, vous utiliserez Certbot pour obtenir un certificat SSL gratuit pour Apache sur Debian 9 et configurerez votre certificat pour qu'il se renouvelle automatiquement.

Ce didacticiel utilisera un fichier d'hôte virtuel Apache distinct au lieu du fichier de configuration par défaut. Nous 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 comme configuration de secours.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un serveur Debian 9 configuré en suivant ce tutoriel configuration initiale du serveur pour Debian 9, y compris un utilisateur non root avec des privilèges sudo et un pare-feu.
  • Un nom de domaine entièrement enregistré. Ce tutoriel utilisera example.com tout au long. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement sur Freenom ou utiliser le bureau d'enregistrement de domaine de votre choix.
  • Les deux enregistrements DNS suivants sont configurés pour votre serveur. Vous pouvez suivre cette introduction à DigitalOcean DNS pour plus de détails sur la façon de les ajouter.
    • Un enregistrement A avec example.com pointant vers l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.example.com pointant vers l'adresse IP publique de votre serveur.
  • Apache installé en suivant Comment installer Apache sur Debian 9. Assurez-vous que vous disposez d'un fichier d'hôte virtuel pour votre domaine. Ce tutoriel utilisera /etc/apache2/sites-available/example.com.conf comme exemple.

Étape 1 - Installation de Certbot

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

Au moment d'écrire ces lignes, Certbot n'est pas disponible par défaut dans les référentiels de logiciels Debian. Afin de télécharger le logiciel à l'aide de apt, vous devrez ajouter le référentiel de rétroportages à votre fichier sources.listapt recherche les sources de packages. Les backports sont des paquets des distributions de test et instables de Debian qui sont recompilés pour fonctionner sans nouvelles bibliothèques sur les distributions stables de Debian.

Pour ajouter le référentiel backports, ouvrez (ou créez) le fichier sources.list dans votre répertoire /etc/apt/ :

sudo nano /etc/apt/sources.list

En bas du fichier, ajoutez la ligne suivante :

/etc/apt/sources.list.d/sources.list

. . .
deb http://ftp.debian.org/debian stretch-backports main

Cela inclut les packages main, qui sont conformes aux Debian Free Software Guidelines (DFSG), ainsi que les composants non-free et contrib, qui sont soit ne sont pas eux-mêmes conformes à DFSG, soit incluent des dépendances dans cette catégorie.

Enregistrez et fermez le fichier en appuyant sur CTRL+X, Y, puis ENTER, puis mettez à jour vos listes de packages :

sudo apt update

Installez ensuite Certbot avec la commande suivante. Notez que l'option -t indique à apt de rechercher le package en regardant dans le référentiel backports que vous venez d'ajouter :

sudo apt install python-certbot-apache -t stretch-backports

Certbot est maintenant prêt à être utilisé, mais pour qu'il puisse configurer SSL pour Apache, nous devons vérifier qu'Apache a été configuré correctement.

Étape 2 - Configuration du certificat SSL

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

Si vous avez suivi l'étape de configuration de l'hôte virtuel dans le tutoriel d'installation d'Apache , vous devriez avoir un bloc VirtualHost pour votre domaine à /etc/apache2/sites-available/example.com.conf avec le ServerName directive déjà définie de manière appropriée.

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/example.com.conf

Trouvez la ligne ServerName existante. Il devrait ressembler à ceci, avec votre propre nom de domaine au lieu de example.com :

/etc/apache2/sites-available/example.com.conf

...
ServerName example.com;
...

Si ce n'est pas déjà fait, mettez à jour la directive ServerName pour pointer vers votre nom de domaine. Enregistrez ensuite le fichier, quittez votre éditeur et vérifiez la syntaxe de vos modifications de configuration :

sudo apache2ctl configtest

S'il n'y a pas d'erreurs de syntaxe, vous verrez ce résultat :

OutputSyntax OK

Si vous obtenez une erreur, rouvrez le fichier de l'hôte virtuel et vérifiez s'il y a des fautes de frappe ou des 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.

Ensuite, mettons à jour le pare-feu pour autoriser le trafic HTTPS.

Étape 3 - Autoriser HTTPS via le pare-feu

Si le pare-feu ufw est activé, comme recommandé par les guides de prérequis, vous devrez ajuster les paramètres pour autoriser le trafic HTTPS. Heureusement, lorsqu'il est installé sur Debian, ufw est livré avec quelques profils qui aident à simplifier le processus de modification des règles de pare-feu pour le trafic HTTP et HTTPS.

Vous pouvez voir le paramètre actuel en tapant :

sudo ufw status

Si vous avez suivi l'étape 2 de notre guide sur Comment installer Apache sur Debian 9, la sortie de cette commande ressemblera à ceci, indiquant que seul le trafic HTTP est autorisé vers le serveur Web :

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
WWW                        ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
WWW (v6)                   ALLOW       Anywhere (v6)

Pour laisser entrer en plus le trafic HTTPS, autorisez le profil « WWW complet » et supprimez l'allocation de profil « WWW » redondante :

sudo ufw allow 'WWW Full'
sudo ufw delete allow 'WWW'

Votre statut devrait maintenant ressembler à ceci :

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
WWW Full                   ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
WWW Full (v6)              ALLOW       Anywhere (v6)        

Ensuite, exécutons Certbot et récupérons nos certificats.

Étape 4 — Obtention d'un certificat SSL

Certbot propose différentes manières d'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, tapez ce qui suit :

sudo certbot --apache -d example.com -d www.example.com

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 utilisez certbot, vous serez invité à saisir une adresse e-mail et à accepter les conditions d'utilisation. Après cela, certbot communiquera avec le serveur Let's Encrypt, puis exécutera 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 :

OutputPlease 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 ENTER. La configuration sera mise à jour et Apache se rechargera pour récupérer les nouveaux paramètres. certbot se terminera par un message vous indiquant que le processus a réussi et où vos certificats sont stockés :

OutputIMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-12-04. 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 en utilisant https:// et remarquez l'indicateur de sécurité de votre navigateur. Il devrait indiquer que le site est correctement sécurisé, généralement avec une icône de cadenas vert. Si vous testez votre serveur à l'aide du SSL Labs Server Test, il obtiendra une note A.

Terminons en testant le processus de renouvellement.

Étape 5 - Vérification du renouvellement automatique de Certbot

Les certificats de Let's Encrypt ne sont valables que pendant quatre-vingt-dix jours. Il s'agit d'encourager les utilisateurs à automatiser leur processus de renouvellement de certificat. Le package certbot que nous avons installé s'en charge pour nous en ajoutant un script de renouvellement à /etc/cron.d. Ce script s'exécute deux fois par jour et renouvellera automatiquement tout certificat dans les trente jours suivant son expiration.

Pour tester le processus de renouvellement, vous pouvez faire un essai avec certbot :

sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes prêt. Si nécessaire, Certbot renouvellera vos certificats et rechargera Apache pour prendre en compte les modifications. Si le processus de renouvellement automatisé échoue, Let's Encrypt enverra un message à l'e-mail que vous avez spécifié, vous avertissant lorsque votre certificat est sur le point d'expirer.

Conclusion

Dans ce didacticiel, vous avez installé le client Let's Encrypt certbot, téléchargé des certificats SSL pour votre domaine, configuré Apache pour utiliser ces certificats et configuré le renouvellement automatique des certificats. Si vous avez d'autres questions sur l'utilisation de Certbot, leur documentation est un bon point de départ.