Comment sécuriser Apache avec Let's Encrypt sur Ubuntu
Introduction
Let's Encrypt est une autorité de certification (CA) qui facilite l'obtention et l'installation de certificats TLS/SSL gratuits, permettant ainsi le HTTPS crypté sur les serveurs Web. Il rationalise 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 guide, vous utiliserez Certbot pour obtenir un certificat SSL gratuit pour Apache sur Ubuntu et vous assurerez que ce certificat est configuré pour se renouveler automatiquement.
Ce didacticiel utilise un fichier hôte virtuel distinct au lieu du fichier de configuration par défaut d'Apache pour configurer le site Web qui sera sécurisé par Let's Encrypt. Nous vous 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 de configuration par défaut comme configuration de secours.
Comment sécuriser Apache avec Let's Encrypt sur Ubuntu
- Installation de Certbot
- Vérification de la configuration de votre hôte virtuel Apache
- Autoriser HTTPS via le pare-feu
- Obtention d'un certificat SSL
- Vérification du renouvellement automatique de Certbot
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin de :
Un serveur Ubuntu configuré avec un utilisateur non root avec les privilèges administratifs
sudo
et un pare-feu activé. Vous pouvez configurer cela en suivant notre didacticiel de configuration initiale du serveur pour Ubuntu.-
Un nom de domaine entièrement enregistré. Ce didacticiel 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 registraire 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
votre_domaine
pointant vers l'adresse IP publique de votre serveur.
- Un enregistrement A avec
- Un enregistrement A avec
www.votre_domaine
pointant vers l'adresse IP publique de votre serveur.
Apache installé en suivant Comment installer Apache sur Ubuntu. Assurez-vous de disposer d'un fichier d'hôte virtuel pour votre domaine. Ce didacticiel 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. Vous utiliserez les référentiels de packages Ubuntu par défaut pour cela.
Tout d’abord, mettez à jour l’index du package local :
sudo apt update
Vous avez besoin de deux packages : certbot
et python3-certbot-apache
. Ce dernier est un plugin qui intègre Certbot à Apache, permettant d'automatiser l'obtention d'un certificat et la configuration du HTTPS au sein de votre serveur web avec une seule commande :
sudo apt install certbot python3-certbot-apache
Vous serez invité à confirmer l'installation en appuyant sur Y
, puis sur ENTER
.
Certbot est maintenant installé sur votre serveur. À l'étape suivante, vous vérifierez la configuration d'Apache pour vous assurer que votre hôte virtuel est correctement défini. Cela garantira que le script client certbot
sera capable de détecter vos domaines et de 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 trouver le bon hôte virtuel dans vos fichiers de configuration Apache. Les noms de domaine de votre serveur seront récupérés à partir 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 configuré pour votre domaine sur /etc/apache2/sites-available/votre_domaine.conf
avec les directives ServerName
et également ServerAlias
déjà définies de manière appropriée.
Pour confirmer que cette configuration est configurée, 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
Recherchez les lignes ServerName
et ServerAlias
existantes. Ils doivent être répertoriés comme suit :
...
ServerName your_domain
ServerAlias www.your_domain
...
Si votre ServerName
et votre ServerAlias
sont déjà configurés comme ceci, vous pouvez quitter votre éditeur de texte et passer à l'étape suivante. Si la configuration actuelle de votre hôte virtuel ne correspond pas à l'exemple, mettez-la à jour en conséquence. Si vous utilisez nano
, vous pouvez quitter en appuyant sur CTRL+X
, puis Y
et ENTER
pour confirmer vos modifications, le cas échéant. Ensuite, exécutez la commande suivante pour valider vos modifications :
sudo apache2ctl configtest
Vous devriez recevoir Syntaxe OK
en réponse. 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 la syntaxe de votre fichier de configuration correcte, rechargez Apache pour que les modifications prennent effet :
sudo systemctl reload apache2
Avec ces modifications, Certbot pourra trouver le bon bloc VirtualHost et 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 prérequis, vous devrez ajuster les paramètres pour autoriser le trafic HTTPS. Lors de l'installation, Apache enregistre quelques profils d'application UFW différents. Vous pouvez tirer parti du profil Apache Full pour autoriser le trafic HTTP et HTTPS sur votre serveur.
Pour vérifier quel type de trafic est actuellement autorisé sur votre serveur, vérifiez l'état :
sudo ufw status
Si vous avez suivi l'un de nos guides d'installation Apache, vous obtiendrez un résultat similaire à celui-ci, ce qui signifie que seul le trafic HTTP sur le port 80
est actuellement autorisé :
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Pour autoriser le trafic HTTPS, autorisez le profil « Apache Full » :
sudo ufw allow 'Apache Full'
Supprimez ensuite le profil « Apache » redondant :
sudo ufw delete allow 'Apache'
Votre statut s'affichera comme suit :
sudo ufw status
Status: 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 façons 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
Ce script vous proposera de répondre à une série de questions afin de configurer votre certificat SSL. Tout d'abord, il vous demandera une adresse e-mail valide. Cet e-mail sera utilisé pour les notifications de renouvellement et les avis de sécurité :
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): you@your_domain
Après avoir fourni une adresse e-mail valide, appuyez sur ENTER
pour passer à l'étape suivante. Vous serez ensuite invité à confirmer si vous acceptez les conditions de service de Let’s Encrypt. Vous pouvez confirmer en appuyant sur Y
puis sur ENTER
:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please 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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
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 à leur contenu, écrivez N
. Sinon, écrivez Y
puis appuyez sur ENTER
pour passer à l'étape suivante :
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would 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'étape suivante vous demandera d'informer Certbot des domaines pour lesquels vous souhaitez activer HTTPS. Les noms de domaine répertoriés sont automatiquement obtenus à partir de la configuration de votre hôte virtuel Apache. Il est donc important de vous assurer que les paramètres ServerName
et ServerAlias
corrects sont configurés dans votre hôte virtuel. Si vous souhaitez activer HTTPS pour tous les noms de domaine répertoriés (recommandé), vous pouvez laisser l'invite vide et appuyer sur ENTER
pour continuer. Sinon, sélectionnez les domaines pour lesquels vous souhaitez activer HTTPS en répertoriant chaque numéro approprié, séparé par des virgules et/ou des espaces, puis appuyez sur ENTER
:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.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):
Après cette étape, la configuration de Certbot est terminée et les remarques finales sur votre nouveau certificat vous seront présentées et où localiser les fichiers générés :
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Votre certificat est maintenant installé et chargé dans la configuration d'Apache. Essayez de recharger votre site Web en utilisant https://
et notez l'indicateur de sécurité de votre navigateur. Cela doit indiquer que votre site est correctement sécurisé, généralement par une icône de verrou dans la barre d'adresse.
Vous pouvez utiliser le test SSL Labs Server pour vérifier la qualité de votre certificat et obtenir des informations détaillées à son sujet, du point de vue d'un service externe.
Dans la prochaine et dernière étape, vous testerez la fonctionnalité de renouvellement automatique de Certbot, qui garantit que votre certificat sera renouvelé automatiquement avant la date d'expiration.
Étape 5 — Vérification du renouvellement automatique de Certbot
Les certificats de Let’s Encrypt ne sont valables que quatre-vingt-dix jours. L'objectif est d'encourager les utilisateurs à automatiser leur processus de renouvellement de certificat, ainsi que de garantir 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 dans /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.
Pour vérifier l'état de ce service et vous assurer qu'il est actif, exécutez ce qui suit :
sudo systemctl status certbot.timer
Votre résultat sera similaire à ce qui suit :
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
Triggers: ● certbot.service
Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.
Pour tester le processus de renouvellement, vous pouvez effectuer un essai à blanc avec certbot
:
sudo certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Si vous ne recevez aucune erreur, vous êtes prêt. Si nécessaire, Certbot renouvellera vos certificats et rechargera Apache pour récupérer les modifications. Si le processus de renouvellement automatisé échoue, Let's Encrypt enverra un message à l'adresse e-mail que vous avez spécifiée, 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é un certificat SSL pour votre domaine et confirmé que le service de renouvellement automatique 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.