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

introduction

Let’s Encrypt est une autorité de certification (CA) qui offre un moyen simple d’obtenir et d’installer desTLS/SSL certificates gratuits, permettant ainsi le chiffrement 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 Ubuntu 18.04 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. We recommend crée 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 comme configuration de secours.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • Un serveur Ubuntu 18.04 configuré en suivant ce tutorielinitial server setup for Ubuntu 18.04, y compris un utilisateur sudo non root et un pare-feu.

  • Un nom de domaine entièrement enregistré. Ce tutoriel utiliserayour_domain comme exemple tout au long. Vous pouvez acheter un nom de domaine surNamecheap, en obtenir un gratuitement surFreenom ou utiliser le registraire de domaine de votre choix.

  • Les deux enregistrements DNS suivants sont configurés pour votre serveur. Vous pouvez suivrethis introduction to DigitalOcean DNS pour savoir comment les ajouter.

    • Un enregistrement A avecyour_domain pointant vers l'adresse IP publique de votre serveur.

    • Un enregistrement A avecwww.your_domain pointant vers l'adresse IP publique de votre serveur.

  • Apache installé en suivantHow To Install Apache on Ubuntu 18.04. Assurez-vous que vous disposez d'unvirtual host file pour votre domaine. Ce tutoriel utilisera/etc/apache2/sites-available/your_domain.conf comme exemple.

[[step-1 -—- Installing-certbot]] == É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.

Certbot est en développement très actif et les paquets Certbot fournis par Ubuntu ont tendance à être obsolètes. Cependant, les développeurs de Certbot conservent un référentiel de logiciels Ubuntu avec des versions à jour, nous allons donc utiliser ce référentiel.

Tout d'abord, ajoutez le référentiel:

sudo add-apt-repository ppa:certbot/certbot

Vous devrez appuyer surENTER pour accepter.

Installez le package Apache de Certbot avecapt:

sudo apt install python-certbot-apache

Certbot est maintenant prêt à être utilisé, mais pour configurer SSL pour Apache, nous devons vérifier certaines de ses configurations.

[[step-2 -—- set-up-the-ssl-certificate]] == Étape 2 - Configurer le certificat SSL

Certbot doit pouvoir trouver le bon hôte virtuel dans votre configuration Apache pour pouvoir configurer automatiquement SSL. Plus précisément, il le fait en recherchant une directiveServerName qui correspond au domaine pour lequel vous demandez un certificat.

Si vous avez suivi lesvirtual host set up step in the Apache installation tutorial, vous devriez avoir un bloc VirtualHost pour votre domaine à/etc/apache2/sites-available/your_domain.com.conf avec la directiveServerName déjà définie correctement.

Pour vérifier, ouvrez le fichier d'hôte virtuel de votre domaine à l'aide denano ou de votre éditeur de texte préféré:

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

Trouvez la ligneServerName existante. Ça devrait ressembler à ça:

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

...
ServerName your_domain;
...

Si c'est le cas, quittez votre éditeur et passez à l'étape suivante.

Si ce n'est pas le cas, mettez-le à jour pour qu'il corresponde. Enregistrez ensuite le fichier, quittez votre éditeur et vérifiez la syntaxe de vos modifications de configuration:

sudo apache2ctl configtest

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 approprié et le mettre à jour.

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

[[step-3 -—- allow-https-through-the-firewall]] == Étape 3 - Autoriser HTTPS à travers le pare-feu

Si le pare-feu deufw est activé, comme recommandé par les guides des prérequis, vous devrez ajuster les paramètres pour autoriser le trafic HTTPS. Heureusement, Apache enregistre quelques profils avecufw lors de l'installation.

Vous pouvez voir le réglage actuel en tapant:

sudo ufw status

Cela ressemblera probablement à ceci, ce qui signifie que seul le trafic HTTP est autorisé vers le serveur Web:

OutputStatus: active

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

Pour ajouter du trafic HTTPS, autorisez le profil complet Apache et supprimez la tolérance de profil Apache redondant:

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

Votre statut devrait maintenant ressembler à ceci:

sudo ufw status
OutputStatus: active

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

Ensuite, exécutons Certbot et récupérons nos certificats.

[[step-4 -—- getting-an-ssl-certificate]] == É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 your_domain -d www.your_domain

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

Si c'est la première fois que vous exécutezcertbot, vous serez invité à saisir une adresse e-mail et à accepter les conditions d'utilisation. Après cela,certbot communiquera avec le serveur Let’s Encrypt, puis lancera un défi pour 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 surENTER. La configuration sera mise à jour et Apache se rechargera pour récupérer les nouveaux paramètres. certbot se terminera par un message vous indiquant que le processus a réussi et où vos certificats sont stockés:

OutputIMPORTANT 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 2018-07-23. 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 à l'aide dehttps:// 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 en utilisant lesSSL Labs Server Test, il obtiendra une noteA.

Terminons par tester le processus de renouvellement.

[[step-5 -—- verifying-certbot-auto-renew]] == Étape 5 - Vérification du renouvellement automatique de Certbot

Les certificats de Let Encrypt ne sont valables que quatre-vingt-dix jours. Cela encourage les utilisateurs à automatiser leur processus de renouvellement des certificats. Le packagecertbot que nous avons installé s'en charge pour nous 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 à sec aveccertbot:

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 Encryptcertbot, téléchargé des certificats SSL pour votre domaine, configuré Apache pour utiliser ces certificats et configuré le renouvellement automatique des certificats. Si vous avez d'autres questions sur l'utilisation de Certbot,their documentation est un bon point de départ.