Comment sécuriser Apache avec Let’s Encrypt sous Ubuntu

Introduction

Lets Encrypt est une Autorité de Certification (CA) qui facilite l’obtention et l’installation de certificats TLS/SSL gratuits, permettant ainsi d’activer le HTTPS chiffré sur les serveurs web. Il simplifie le processus en fournissant un client logiciel, Certbot, qui tente de automatiser la plupart (voire tous) des étapes nécessaires. Actuellement, l’ensemble du processus d’obtention et d’installation d’un certificat est entièrement automatisé tanto pour Apache que pour 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.

Cette tutoriel utilise un fichier d’hôte virtuel séparé 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 recommandons de créer de nouveaux fichiers d’hôte virtuel Apache pour chaque domaine hébergé sur un serveur, car cela aide à éviter les erreurs courantes et maintient les fichiers de configuration par défaut comme configuration de secours.

Comment sécuriser Apache avec Let’s Encrypt sur Ubuntu

  1. Installation de Certbot
  2. Vérification de votre configuration de virtual host Apache
  3. Autorisation du protocole HTTPS via le pare-feu
  4. Obtention d’un certificat SSL
  5. Vérification de l’auto-renouvellement de Certbot

Prérequis

Pour suivre ce tutoriel, vous aurez besoin :

  • D’un serveur Ubuntu configuré avec un utilisateur non-root ayant les privilèges administratifs sudo et un pare-feu activé. Vous pouvez configurer cela en suivant notre tutoriel de configuration initiale du serveur pour Ubuntu.

  • 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 registraire de domaine de votre choix.

  • Les deux enregistrements DNS suivants doivent être configurés pour votre serveur. Vous pouvez suivre ce guide sur les DNS DigitalOcean pour des détails sur la manière dont 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 a été installé en suivant Comment installer Apache sur Ubuntu. Assurez-vous que vous avez un fichier de virtual host 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. Vous utiliserez les dépôts de paquets Ubuntu par défaut pour cela.

Tout d’abord, mettez à jour l’index local des paquets :

  1. sudo apt update

Vous avez besoin de deux paquets : certbot et python3-certbot-apache. Ce dernier est un plugin qui intègre Certbot avec Apache, permettant d’automatiser l’obtention d’un certificat et la configuration HTTPS dans votre serveur web avec une seule commande :

  1. sudo apt install certbot python3-certbot-apache

Vous serez invité à confirmer l’installation en appuyant sur O, puis Entrée.

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 configuré correctement. Cela garantira que le script client certbot pourra détecter vos domaines et reconfigurer automatiquement votre serveur web pour utiliser 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 l’hôte virtuel correct 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 tutoriel d’installation d’Apache, vous devriez avoir un bloc VirtualHost configuré pour votre domaine à /etc/apache2/sites-available/votre_domaine.conf avec les directives ServerName et également ServerAlias déjà correctement réglées.

Pour confirmer que cela est configuré, ouvrez le fichier de l’hôte virtuel pour votre domaine en utilisant nano ou votre éditeur de texte préféré :

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

Trouvez les lignes existantes ServerName et ServerAlias. Elles devraient être listées comme suit :

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Si vous avez déjà configuré vos ServerName et ServerAlias comme cela, vous pouvez quitter votre éditeur de texte et passer à l’étape suivante. Si votre configuration actuelle de serveur 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 ENTRÉE pour confirmer vos modifications, le cas échéant. Ensuite, exécutez la commande suivante pour valider vos modifications :

  1. sudo apache2ctl configtest

Vous devriez recevoir Syntaxe OK en réponse. Si vous obtenez une erreur, réouvrez le fichier de configuration du serveur virtuel et vérifiez les erreurs de frappe ou les caractères manquants. Une fois que la syntaxe de votre fichier de configuration est correcte, rechargez Apache pour que les modifications prennent effet :

  1. sudo systemctl reload apache2

Avec ces modifications, Certbot pourra trouver le bloc VirtualHost correct et le mettre à jour.

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

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

Si vous avez le pare-feu UFW activé, comme recommandé par les guides de prérequis, vous devrez ajuster les paramètres pour autoriser le trafic HTTPS. Après l’installation, Apache enregistre plusieurs profils d’application UFW différents. Vous pouvez utiliser le profil Apache Full pour autoriser à la fois 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 :

  1. sudo ufw status

Si vous avez suivi l’un de nos guides d’installation d’Apache, vous aurez une sortie similaire à celle ci-dessous, ce qui signifie que seul le trafic HTTP sur le port 80 est actuellement autorisé :

Output
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 » :

  1. sudo ufw allow 'Apache Full'

Ensuite, supprimez le profil redondant « Apache » :

  1. sudo ufw delete allow 'Apache'

Votre état s’affichera comme suit :

  1. sudo ufw status
Output
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 divers moyens d’obtenir des certificats SSL via des plugins. Le plugin Apache se charge de reconfigurer Apache et de recharger la configuration selon nécessaire. Pour utiliser ce plugin, exécutez la commande suivante :

  1. sudo certbot --apache

Ce script vous demandera de répondre à une série de questions afin de configurer votre certificat SSL. D’abord, il vous demandera une adresse e-mail valide. Cette adresse e-mail sera utilisée pour les notifications de renouvellement et les avis de sécurité :

Output
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 Entrée pour passer à l’étape suivante. Vous serez ensuite invité à confirmer si vous acceptez les conditions d’utilisation de Let’s Encrypt. Vous pouvez confirmer en appuyant sur O puis sur Entrée :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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

Souhaitez-vous partager votre courriel avec la Fondation Électronique Frontière pour recevoir des nouvelles et d’autres informations ? Si vous ne souhaitez pas souscrire à leur contenu, écrivez N. Sinon, écrivez Y puis appuyez sur ENTREE 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 de informer Certbot des domaines pour lesquels vous souhaitez activer HTTPS. Les noms de domaines listés sont automatiquement obtenus de la configuration de votre serveur Apache, il est donc important de vous assurer que vous avez les bonnes configurations pour ServerName et ServerAlias dans votre hôte virtuel. Si vous souhaitez activer HTTPS pour tous les domaines listés (recommandé), vous pouvez laisser le prompt vide et appuyer sur ENTREE pour passer. Sinon, sélectionnez les domaines pour lesquels vous souhaitez activer HTTPS en énumérant chaque numéro approprié, séparés par des virgules et/ou des espaces, puis appuyez sur ENTREE :

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 cet étape, la configuration de Certbot est terminée et vous serez présenté les derniers commentaires sur votre nouveau certificat et où se trouvent les fichiers générés :

Output
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 remarquez l’indicateur de sécurité de votre navigateur. Il devrait indiquer que votre site est sécurisé correctement, généralement par une icône de verrou 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, depuis le point de vue d’un service externe.

Dans l’étape suivante et finale, 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 pour quatre-vingt-dix jours. Cela encourage les utilisateurs à automatiser leur processus de renouvellement de certificat, ainsi qu’à s’assurer que les certificats mal utilisés ou les clés volées expirent plus tôt plutôt qu’à plus tard.

Le paquet certbot que vous avez installé s’occupe des 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 qui est dans un délai de trente jours avant l’expiration.

Pour vérifier l’état de ce service et vous assurer qu’il est actif, exécutez la commande suivante :

  1. sudo systemctl status certbot.timer

La sortie sera similaire à celle-ci :

Output
● 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 à sec avec certbot :

  1. sudo certbot renew --dry-run
Output
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, tout est prêt. Lorsqu’il le faut, Certbot renouvellera vos certificats et rechargera Apache pour prendre en compte les modifications. Si le processus de renouvellement automatique échoue à un moment donné, 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 tutoriel, 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 des questions supplémentaires sur l’utilisation de Certbot, <diy5leur documentation est un bon point de départ.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu