Tutorial

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

ApacheLet's EncryptUbuntu 20.04

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 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 guide, nous utiliserons Certbot pour obtenir un certificat SSL gratuit pour Apache sur Ubuntu 20.04, et nous nous assurerons que ce certificat est configuré pour se renouveler automatiquement.

Ce 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ôtes virtuels Apache pour chaque domaine hébergé dans un serveur, car cela permet d'éviter les erreurs courantes et de conserver les fichiers de configuration par défaut comme configuration de repli.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 20.04 configuré en suivant cette configuration initiale du serveur pour le tutoriel Ubuntu 20.04, comprenant un utilisateur sudo non root et un pare-feu.

  • Un nom de domaine entièrement enregistré. Ce tutoriel utilisera your_domain comme exemple tout du 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 ont été configurés pour votre serveur. Vous pouvez suivre cette introduction à DigitalOcean DNS pour savoir comment les ajouter.

    • Un enregistrement A avec your_domain pointant sur l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.your_domain​​​​​​ pointant à l'adresse IP publique de votre serveur.
  • Apache installé en suivant le guide Comment installer Apache sur Ubuntu 20.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, nous devons d'abord installer le logiciel Certbot sur votre serveur. Nous utiliserons pour cela les dépôts de packages Ubuntu par défaut.

Nous avons 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 HTTPS au sein de votre serveur web avec une seule commande.

  • sudo apt install certbot python3-certbot-apache

Vous serez également invité à confirmer l'installation en appuyant sur Y, puis sur ENTER.

Certbot est maintenant installé sur votre serveur. Dans l'étape suivante, nous allons vérifier la configuration d'Apache pour nous assurer que votre hôte virtuel est correctement configuré. Ainsi, le script client certbot pourra détecter vos domaines et reconfigurer votre serveur web pour utiliser automatiquement votre nouveau certificat SSL généré.

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

Afin de pouvoir obtenir et configurer automatiquement le SSL pour votre serveur web, Certbot doit trouver le bon hôte virtuel dans vos fichiers de configuration Apache. Le(s) nom(s) de domaine de votre serveur sera récupéré à 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/your_domain.conf avec les directives ServerName et ServerAlias déjà définies de manière appropriée.

Pour vérifier cela, 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. Elles devraient ressembler à ceci :

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

Si vous avez déjà configuré votre ServerName et ServerAlias de cette manière, vous pouvez quitter votre éditeur de texte et passer à l'étape suivante. Si vous utilisez nano, vous pouvez sortir en tapant CTRL+X, puis Y et ENTER pour confirmer.

Si la configuration actuelle de votre hôte virtuel ne correspond pas à l'exemple, mettez-la à jour en conséquence. Lorsque vous avez terminé, sauvegardez le fichier et quittez l'éditeur. Ensuite, exécutez la commande suivante pour valider vos modifications :

  • sudo apache2ctl configtest

Vous devriez obtenir Syntax OK en guise de réponse. 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 que la syntaxe de votre fichier de configuration est correcte, rechargez Apache pour que les modifications prennent effet :

  • sudo systemctl reload apache2

Grâce à ces changements, Certbot sera en mesure de trouver le bloc VirtualHost correct et de le mettre à jour.

Ensuite, nous allons mettre à jour le pare-feu pour permettre le trafic HTTPS.

Étape 3 — Autorisation du HTTPS à travers le pare-feu

Si vous avez activé le pare-feu UFW, comme le recommandent les guides des conditions préalables, vous devrez ajuster les paramètres pour autoriser le trafic HTTPS. Lors de l'installation, Apache enregistre quelques profils d'application UFW différents. Nous pouvons utiliser le 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, vous pouvez utiliser :

  • sudo ufw status

Si vous avez suivi l'un de nos guides d'installation d'Apache, votre sortie devrait ressembler à ceci, 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 permettre également le trafic HTTPS, autoriser le profil “Apache Full” et supprimer le profil “Apache” redondant :

  • sudo ufw allow 'Apache Full'
  • sudo ufw delete allow 'Apache'

Votre statut ressemblera désormais à ceci :

  • 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 différents moyens d'obtenir des certificats SSL par le biais de 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

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

Output
Saving 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): you@your_domain

Après avoir fourni une adresse électronique valide, appuyez sur ENTER pour passer à l'étape suivante. Vous serez ensuite invité à confirmer si vous acceptez les conditions d'utilisation du service Let’s Encrypt. Vous pouvez confirmer en appuyant sur A et ensuite 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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Ensuite, il vous sera demandé si vous souhaitez partager votre adresse électronique avec l'Electronic Frontier Foundation pour recevoir des nouvelles et d'autres informations. Si vous ne souhaitez pas vous abonner à leur contenu, tapez N. Sinon, tapez Y. Ensuite, 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

La prochaine étape vous invitera à informer Certbot des domaines pour lesquels vous souhaitez activer le HTTPS. Les noms de domaine listés sont obtenus automatiquement à partir de la configuration de votre hôte virtuel Apache, c'est pourquoi il est important de s'assurer que vous avez les paramètres ServerName et ServerAlias corrects configurés dans votre hôte virtuel. Si vous souhaitez activer le 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 le HTTPS en énumérant 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):

Vous verrez une sortie de ce type :

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.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, vous serez invité à choisir si vous voulez ou non que le trafic HTTP soit redirigé vers le HTTPS. En pratique, cela signifie que lorsqu'une personne visite votre site web par des canaux non cryptés (HTTP), elle sera automatiquement redirigée vers l'adresse HTTPS de votre site web. Choisissez 2 pour activer la redirection, ou 1 si vous souhaitez conserver HTTP et HTTPS comme méthodes distinctes d'accès à votre site web.

Please 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 cette étape, la configuration de Certbot est terminée, et les dernières remarques sur votre nouveau certificat vous seront présentées, ainsi que l'emplacement des fichiers générés et la manière de tester votre configuration à l'aide d'un outil externe qui analyse l'authenticité de votre certificat :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your_domain and
https://www.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=www.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 2020-07-27. 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

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 doit indiquer que votre site est correctement sécurisé, généralement en incluant une icône de cadenas dans la barre d'adresse.

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

Dans la prochaine et dernière étape, nous testerons la fonction de renouvellement automatique de Certbot, qui garantit que votre certificat sera renouvelé automatiquement avant la date d'expiration.

Étape 5 — Verification du renouvellement automatique de Certbot

Les certificats Let’s Encrypt ne sont valables que quatre-vingt-dix jours. Cette mesure vise à encourager les utilisateurs à automatiser le processus de renouvellement de leurs certificats, ainsi qu'à garantir que les certificats utilisés abusivement ou les clés volées expirent le plus tôt possible.

Le package certbot que nous avons 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 est exécuté deux fois par jour et renouvellera automatiquement tout certificat qui se trouve dans une période de trente jours précédant son expiration.

Pour vérifier le statut de ce service et vous assurer qu'il est actif et qu'il fonctionne, vous pouvez utiliser :

  • sudo systemctl status certbot.timer

Vous aurez une sortie similaire à celle-ci :

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

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

  • sudo certbot renew --dry-run

Si vous ne voyez pas d'erreurs, tout est 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 électronique que vous avez indiquée, vous avertissant de l'expiration prochaine de votre certificat.

Conclusion

Dans ce tutoriel, vous avez installé le certbot client Let’s Encrypt, 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.

0 Comments

Creative Commons License