Comment sécuriser Apache avec Let’s Encrypt sur Debian 10

introduction

Let’s Encrypt est une autorité de certification qui fournit un moyen simple d’obtenir et d’installer gratuitement https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with. -ssl-certificats-clés-privées-et-csrs [certificats TLS / SSL], permettant ainsi le cryptage HTTPS sur les serveurs Web. Il simplifie le processus en fournissant un logiciel client, 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 tutoriel, vous allez utiliser Certbot pour obtenir un certificat SSL gratuit pour Apache sous Debian 10 et configurer 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. https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-10#step-5-%E2%80%94-setting-up-virtual -hosts- (recommandé) [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.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

Étape 1 - Installation de Certbot

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

Au moment de la rédaction de ce document, Certbot n’est pas disponible par défaut dans les dépôts de logiciels Debian. Pour télécharger le logiciel en utilisant + apt +, vous devez ajouter le référentiel de backports à votre fichier + sources.list ++ apt + cherche les sources du paquet. Les backports sont des paquets issus des distributions de test et instables de Debian qui sont recompilées de manière à s’exécuter sans nouvelles bibliothèques sur des distributions Debian stables.

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

sudo nano /etc/apt/sources.list

Au bas du fichier, ajoutez la ligne suivante:

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

. . .
deb http://mirrors.digitalocean.com/debian buster-backports main
deb-src http://mirrors.digitalocean.com/debian buster-backports main

Ceci inclut les packages + main +, qui sont Les principes du logiciel libre Debian (DFSG) - ainsi que les ` non-free + `et + contrib + `composants, qui ne sont pas eux-mêmes compatibles DFSG ou incluent des dépendances dans cette catégorie.

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

sudo apt update

Puis installez Certbot avec la commande suivante. Notez que l’option + -t + demande à + ​​apt + de rechercher le paquet en consultant le référentiel de backports que vous venez d’ajouter:

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

Certbot est maintenant prêt à être utilisé, mais pour 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 pouvoir configurer automatiquement SSL. Pour ce faire, il recherche une directive + NomServeur + correspondant au domaine pour lequel vous demandez un certificat.

Si vous avez suivi la https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-10#step-5-%E2%80%94-setting -up-virtual-hosts- (recommandé) [étape de la configuration de l’hôte virtuel dans le tutoriel d’installation d’Apache], vous devez disposer d’un bloc + VirtualHost + pour votre domaine à + ​​/ etc / apache2 / sites-available / .conf + avec la directive + ServerName + est déjà définie correctement.

Pour vérifier, ouvrez le fichier hôte virtuel de votre domaine en utilisant + nano + ou votre éditeur de texte préféré:

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

Recherchez la ligne + NomServeur + existante. Cela devrait ressembler à ceci, avec votre propre nom de domaine au lieu de ++:

/etc/apache2/sites-available/your_domain.conf

...
ServerName ;
...

Si ce n’est pas déjà le cas, mettez à jour la directive + NomServeur + pour qu’elle pointe 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’erreur de syntaxe, vous verrez ceci dans votre sortie:

OutputSyntax OK

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

sudo systemctl reload apache2

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

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

Étape 3 - Autoriser HTTPS à travers 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, une fois installé sur Debian, + ufw + est fourni avec quelques profils qui simplifient le processus de modification des règles de pare-feu pour le trafic HTTP et HTTPS.

Vous pouvez voir le réglage actuel en tapant:

sudo ufw status

Si vous avez suivi l’étape 2 de notre guide à l’adresse https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-10#step-2-%E2 % 80% 94-setting-the-firewall [Comment installer Apache sur Debian 10], le résultat de cette commande ressemblera à ceci: il indique que seul le trafic HTTP est autorisé sur 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 ajouter du trafic HTTPS, autorisez le profil «WWW complet» et supprimez le profil redondant «WWW»:

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 diverses méthodes pour obtenir des certificats SSL via des plugins. Le plugin Apache se chargera de reconfigurer Apache et de recharger la configuration si nécessaire. Pour utiliser ce plugin, tapez ce qui suit:

sudo certbot --apache -d  -d

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

Si vous utilisez pour la première fois + certbot +, vous serez invité à entrer une adresse électronique et à accepter les conditions d’utilisation. En outre, il vous sera demandé si vous souhaitez partager votre adresse e-mail avec la Electronic Frontier Foundation, une organisation à but non lucratif qui défend les droits numériques et qui est également à l’origine de Certbot. N’hésitez pas à entrer «+ Y » pour partager votre adresse e-mail ou « N +» pour refuser.

Ensuite, + certbot + communiquera avec le serveur Let’s Encrypt, puis lancera un défi afin de 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 automatiquement et Apache se rechargera pour récupérer les nouveaux paramètres. + certbot + se terminera par un message vous informant que le processus a abouti et où vos certificats sont stockés:

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live//fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live//privkey.pem
  Your cert will expire on 2019-10-20. 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 notez 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 verrou vert. Si vous testez votre serveur à l’aide du SSL Labs Server Test, il obtiendra une note * A *.

Terminons par tester le processus de renouvellement.

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

Les certificats de Let Encrypt ne sont valides que pendant quatre vingt dix jours. Cela encourage les utilisateurs à automatiser leur processus de renouvellement des certificats. Le paquetage + certbot + que nous avons installé s’occupe de cela en ajoutant un script de renouvellement à + ​​/ etc / cron.d +. Ce script est exécuté deux fois par jour et renouvelle automatiquement tout certificat dans les trente jours suivant son expiration.

Pour tester le processus de renouvellement, vous pouvez effectuer un essai à blanc avec + certbot +:

sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes tous ensemble. Si nécessaire, Certbot renouvellera vos certificats et rechargera Apache pour prendre en compte les modifications. En cas d’échec du processus de renouvellement automatique, Let’s Encrypt enverra un message au courrier électronique que vous avez spécifié pour vous avertir de l’expiration de votre certificat.

Conclusion

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