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

De Get Docs
Aller à :navigation, rechercher

Introduction

Let's Encrypt est une autorité de certification (CA) qui fournit un moyen d'obtenir et d'installer des certificats TLS/SSL gratuits, permettant ainsi le chiffrement HTTPS sur les serveurs Web. Il rationalise 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 Ubuntu 18.04 et vérifier que votre certificat est configuré pour se renouveler automatiquement.

Ce didacticiel utilise un fichier d'hôte virtuel Apache distinct au lieu du fichier de configuration par défaut pour configurer le site Web qui sera sécurisé par Let's Encrypt. Nous recommandons de créer de nouveaux fichiers d'hôte virtuel Apache pour chaque domaine hébergé sur un serveur, car cela permet d'éviter les erreurs courantes et de conserver les fichiers par défaut comme configuration de secours.

Conditions préalables

Pour terminer ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 18.04 configuré en suivant ce tutoriel de configuration initiale du serveur pour 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 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 your_domain pointant vers l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.your_domain pointant vers l'adresse IP publique de votre serveur.
  • Apache installé en suivant Comment installer Apache sur Ubuntu 18.04. Assurez-vous que vous disposez d'un fichier d'hôte virtuel pour votre domaine. Ce tutoriel utilisera /etc/apache2/sites-available/your_domain.conf comme exemple.

Étape 1 - Installation de Certbot

Pour obtenir un certificat SSL avec Let's Encrypt, vous devez installer le logiciel Certbot sur votre serveur. Pour ce didacticiel, nous utiliserons les référentiels de packages Ubuntu par défaut pour installer Certbot.

Exécutez la commande suivante, qui installera deux packages : certbot et python3-certbot-apache. Ce dernier est un plugin qui intègre Certbot à Apache, de sorte qu'il est possible d'automatiser l'obtention d'un certificat et la configuration HTTPS au sein de votre serveur Web avec une seule commande :

sudo apt install certbot python3-certbot-apache

Confirmez l'installation en appuyant sur Y puis sur ENTER pour accepter.

Certbot est maintenant installé sur votre serveur. Ensuite, vous vérifierez la configuration d'Apache pour vous assurer que votre hôte virtuel est correctement configuré. Cela garantit que le script client certbot pourra détecter vos domaines et reconfigurer votre serveur Web pour utiliser automatiquement votre certificat SSL nouvellement généré.

Étape 2 - Vérification de la configuration de votre hôte virtuel Apache

Pour obtenir et configurer automatiquement SSL pour votre serveur Web, Certbot doit pouvoir localiser l'hôte virtuel correct dans vos fichiers de configuration Apache. Le ou les noms de domaine de votre serveur seront extraits des directives ServerName et ServerAlias définies dans votre bloc de configuration VirtualHost.

Si vous avez suivi l'étape de configuration de l'hôte virtuel dans le didacticiel d'installation d'Apache , vous devriez avoir un bloc VirtualHost pour votre domaine sur /etc/apache2/sites-available/your_domain.conf avec la directive ServerName 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/your_domain.conf

Trouvez les lignes ServerName et ServerAlias existantes :

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

...
ServerName your_domain;
SeverAlias www.your_domain
...

Si votre ServerName et ServerAlias sont déjà configurés, vous pouvez quitter l'éditeur de texte et passer à l'étape suivante. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL + X puis Y et ENTER.

Si la configuration actuelle de votre hôte virtuel ne correspond pas, mettez-la à jour en conséquence. Après, enregistrez et quittez l'éditeur de texte. Ensuite, validez vos modifications :

sudo apache2ctl configtest

S'il n'y a pas d'erreur avec la syntaxe de votre fichier d'hôte virtuel, vous recevrez une réponse Syntax OK. Si vous recevez 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

Avec ces modifications en vigueur, Certbot sera en mesure de trouver le bon bloc VirtualHost et de le mettre à jour.

Ensuite, vous mettrez à 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. Apache enregistre quelques profils d'application UFW et vous pouvez tirer parti du profil Apache Full pour autoriser le trafic HTTP et HTTPS sur votre serveur.

Vérifiez le type de trafic actuellement autorisé sur votre serveur en exécutant ce qui suit :

sudo ufw status

Si vous avez suivi l'un de nos guides d'installation Apache, votre sortie générera ce qui suit, cela signifie que seul le trafic HTTP sur le port 80 est autorisé :

OutputStatus: active

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

Pour autoriser en plus le trafic HTTPS, autorisez le profil Apache Full :

sudo ufw allow 'Apache Full'

Ensuite, supprimez l'allocation de profil Apache redondante :

sudo ufw delete allow 'Apache'

Vérifiez à nouveau l'état :

sudo ufw status

Vous devriez recevoir la sortie suivante :

OutputStatus: active

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

Vous êtes maintenant prêt à exécuter Certbot et à obtenir vos 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, exécutez ce qui suit :

sudo certbot --apache

Cette commande générera une invite avec une série de questions pour configurer votre certificat SSL. Tout d'abord, il vous sera demandé de fournir une adresse e-mail valide, ceci aux fins des notifications de renouvellement et des avis de sécurité :

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]_domain

Après avoir fourni une adresse e-mail valide, appuyez sur ENTER et passez à l'étape suivante. Il vous sera demandé de confirmer si vous acceptez les conditions d'utilisation de Let's Encrypt. Confirmez en appuyant sur A et ENTER :

OutputPlease read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Ensuite, il vous sera demandé si vous souhaitez partager votre e-mail avec l'Electronic Frontier Foundation pour recevoir des nouvelles et d'autres informations. Si vous ne souhaitez pas vous abonner, appuyez sur N, sinon appuyez sur Y puis ENTER pour passer à l'étape suivante :

OutputWould you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

L'invite informera Certbot des domaines pour lesquels vous souhaitez activer HTTPS. La liste des noms de domaine est automatiquement extraite de la configuration de votre hôte virtuel Apache. C'est pourquoi il était important de confirmer que les paramètres ServerName et ServerAlias sont correctement configurés dans votre hôte virtuel. Si vous souhaitez activer HTTPS pour tous les noms de domaine répertoriés (recommandé), laissez l'invite vide et appuyez sur ENTER pour continuer. Sinon, sélectionnez les domaines pour lesquels vous souhaitez activer HTTPS en indiquant chaque numéro approprié, séparé par des virgules et/ou des espaces, puis appuyez sur ENTER :

OutputWhich names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

Vous recevrez la sortie suivante :

OutputObtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

Ensuite, il vous sera demandé de sélectionner si vous souhaitez ou non que le trafic HTTP soit dirigé vers HTTPS. Cela signifie que lorsqu'une personne visite votre site Web via des canaux non cryptés (HTTP), elle est automatiquement redirigée vers l'adresse HTTPS de vos sites Web. Choisissez 2 pour activer la redirection, ou 1 si vous souhaitez conserver HTTP et HTTPS comme méthodes distinctes pour accéder à votre site Web :

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): 2

Après avoir saisi votre réponse, la configuration de Certbot se terminera. Vous recevrez des remarques finales sur votre nouveau certificat, où trouver les fichiers générés et comment tester votre configuration à l'aide d'un outil externe pour analyser l'authenticité de votre certificat :

OutputCongratulations! You have successfully enabled https://your_domain
and your_domain

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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 2022-03-07. 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"
 - 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 dans la configuration d'Apache. Essayez de recharger votre site Web en utilisant https:// et remarquez l'indicateur de sécurité de votre navigateur. Il doit indiquer que le site est correctement sécurisé, généralement avec une icône de verrouillage dans la barre d'adresse.

Vous pouvez utiliser le SSL Labs Server Test pour vérifier la note de votre certificat et obtenir des informations détaillées à son sujet, du point de vue d'un service externe.

À l'étape suivante, vous testerez la fonction de renouvellement automatique de Certbot, qui garantit que votre certificat se renouvellera automatiquement avant la date d'expiration.

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

Les certificats 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 et de s'assurer que les certificats mal utilisés ou les clés volées expireront le plus tôt possible.

Le package certbot que vous avez installé prend en charge les renouvellements en incluant un script de renouvellement pour /etc/cron.d, qui est géré par un service systemctl appelé certbot.timer. Ce script s'exécute deux fois par jour et renouvellera automatiquement tout certificat dans les trente jours suivant son expiration.

Vérifiez l'état de ce service et assurez-vous qu'il est actif et en cours d'exécution :

sudo systemctl status certbot.timer

Vous recevrez une sortie semblable à la suivante :

Output● certbot.timer - Run certbot twice daily
   Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: en
   Active: active (waiting) since Tue 2021-12-07 20:04:42 UTC; 1h 45min ago
  Trigger: Wed 2021-12-08 11:22:45 UTC; 13h left

Dec 07 20:04:42 encrypt systemd[1]: Started Run certbot twice daily.

Testez le processus de renouvellement en faisant un essai avec certbot :

sudo certbot renew --dry-run

Si vous ne recevez 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, configuré et installé des certificats SSL pour votre domaine et confirmé que le service de renouvellement automatique des certificats de Certbot est actif dans systemctl. Si vous avez d'autres questions sur l'utilisation de Certbot, leur documentation est un bon point de départ.