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

apache illustration for: Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

  • 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 à DNS hosting 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.

É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/&lt;^&gt;your_domain&lt;^&gt;.conf

				
			

Trouvez les lignes ServerName et ServerAlias existantes. Elles devraient ressembler à ceci :

				
					
[label /etc/apache2/sites-available/your_domain.conf]

...

ServerName &lt;^&gt;your_domain&lt;^&gt;

ServerAlias &lt;^&gt;www.your_domain&lt;^&gt;

...

				
			

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

				
					
[secondary_label Output]

Status: active



To                         Action      From

--                         ------      ----

OpenSSH                    ALLOW       Anywhere                  

&lt;^&gt;Apache                     ALLOW       Anywhere&lt;^&gt;             

OpenSSH (v6)               ALLOW       Anywhere (v6)             

&lt;^&gt;Apache (v6)                ALLOW       Anywhere (v6)&lt;^&gt;

				
			

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

				
			
				
					
[secondary_label Output]

Status: active



To                         Action      From

--                         ------      ----

OpenSSH                    ALLOW       Anywhere                  

&lt;^&gt;Apache Full                ALLOW       Anywhere&lt;^&gt;                  

OpenSSH (v6)               ALLOW       Anywhere (v6)             

&lt;^&gt;Apache Full (v6)           ALLOW       Anywhere (v6)&lt;^&gt;        

				
			

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

				
					
[secondary_label 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): &lt;^&gt;you@your_domain&lt;^&gt;

				
			

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: &lt;^&gt;A&lt;^&gt;

				
			

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: &lt;^&gt;N&lt;^&gt;

				
			

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: &lt;^&gt;your_domain&lt;^&gt;

2: www.&lt;^&gt;your_domain&lt;^&gt;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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 &lt;^&gt;your_domain&lt;^&gt;

http-01 challenge for www.&lt;^&gt;your_domain&lt;^&gt;

Enabled Apache rewrite module

Waiting for verification...

Cleaning up challenges

Created an SSL vhost at /etc/apache2/sites-available/&lt;^&gt;your_domain&lt;^&gt;-le-ssl.conf

Enabled Apache socache_shmcb module

Enabled Apache ssl module

Deploying Certificate to VirtualHost /etc/apache2/sites-available/&lt;^&gt;your_domain&lt;^&gt;-le-ssl.conf

Enabling available site: /etc/apache2/sites-available/&lt;^&gt;your_domain&lt;^&gt;-le-ssl.conf

Deploying Certificate to VirtualHost /etc/apache2/sites-available/&lt;^&gt;your_domain&lt;^&gt;-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): &lt;^&gt;2&lt;^&gt;



				
			

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://&lt;^&gt;your_domain&lt;^&gt; and

https://www.&lt;^&gt;your_domain&lt;^&gt;



You should test your configuration at:

https://www.ssllabs.com/ssltest/analyze.html?d=&lt;^&gt;your_domain&lt;^&gt;

https://www.ssllabs.com/ssltest/analyze.html?d=www.&lt;^&gt;your_domain&lt;^&gt;

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at:

   /etc/letsencrypt/live/&lt;^&gt;your_domain&lt;^&gt;/fullchain.pem

   Your key file has been saved at:

   /etc/letsencrypt/live/&lt;^&gt;your_domain&lt;^&gt;/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 :

				
					
[secondary_label 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.