Let's Encrypt :: Un certificat SSL pour Apache

Installation d'un certificat pour votre serveur Apache

Dans ce tutoriel, vous apprendrez à installer et configurer Certbotsur votre serveur Web et à installer et renouveler le certificat de votre site web.

Pour plus d’informations en français sur Let’s Encrypt, vous pouvez lire l’article Let’s Encrypt – Le certificat SSL gratuit.

Contraintes connues à ce jour :

  • – un certificat est dédié à un enregistrement précis du domaine
  • – un certificat est valable 3 mois

Bientôt, un certificat Let’s Encrypt pourra concerner tout un domaine.

Dans notre cas, nous avons un serveur sous CentOS 7 exécutant Apache 2 et ayant plusieurs sites web configurés pour chacun dans son propre fichier de configuration. Les sites web sont accessibles via http (donc, via le port 80/tcp).

Installation de Certbot pour Apache

Pour utiliser les certificats de Let’s Encrypt, nous allons utiliser Certbot qui est l’outil officiel. Il en existe d’autres dont nous ne parlerons pas ici.

Préparation

Si vous avez déployé une machine virtuelle basée sur un modèle de machine virtuelle linuxet que vous avez déjà prévu le dépôt Epel-Release, ignorez la commande suivante.

Ajout du dépôt Epel-Release :

Ajout du dépôt Epel-Release
$ sudo yum install -y epel-release

 

Installons donc Certbot :

Installation de Certbot
$ sudo yum install -y certbot-apache

 

Obtention du certificat et configuration du site Web

L’outil de gestion de certificats étant installé, il ne nous reste plus qu’à se jeter dans le grand bain.

Obtention et configuration 
$ sudo certbot --apache

 

Certbot va rechercher toutes les configurations disponibles sur le serveur et vous demander sur laquelle installer le tout nouveau certificat.

Réponse de certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: www.mydomain.org
2: api.mydomain.org
3: test.mydomain.org
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

 

Choisissez sur quel site web vous désirez installer le certificat en saisissant son numéro. Ici, j’ai choisi de configurer mon nouveau certificat sur l’API de mon site web.

Rediriger ou non ?
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for api.mydomain.org
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/httpd/sites-available/mydomain.org-api-le-ssl.conf
Deploying Certificate for api.mydomain.org to VirtualHost /etc/httpd/sites-available/mydomain.org-api-le-ssl.conf

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

En choisissant de rediriger automatiquement vers la connexion sécurisée, Certbot se charge de modifier le fichier de configuration du site web.

Redirecting vhost in /etc/httpd/sites-available/mydomain.org-api.conf to ssl vhost in /etc/httpd/sites-available/mydomain.org-api-le-ssl.conf

-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://api.mydomain.org

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=api.mydomain.org
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/api.mydomain.org/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/api.mydomain.org/privkey.pem
   Your cert will expire on 2018-03-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"
 - 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

 

Et voilà. Votre site Web est maintenant sécurisé. Le certificat est reconnu par le navigateur comme un certificat de confiance grâce à l’entité Let’s Encrypt.

 

Renouvellement du certificat

Comme le certificat n’a qu’une durée de vie de 3 mois, il faut le renouveler plusieurs fois par an.

Pour renouveler le certificat manuellement depuis la ligne de commande du serveur hébergeant le site web, il suffit de lancer la commande suivante :

Renouvellement des certificats
$ sudo certbot renew

 

Afin d’automatiser le renouvellement des certificats installés sur la machine, rien de mieux qu’une entrée dans le CRON.

Il semble être recommandé par le site de Certbot, de lancer l’outil de renouvellement bi quotidiennement via le CRON suivant :

CRON bi-quotidien
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew 

 

Personnellement, je préfère effectuer cette tentative de renouvellement chaque semaine le dimanche à 2h18 (par exemple).

18 2 * * 7 root certbot renew

 

Ajoutons l’instruction de votre choix dans le CRON :

Edition du fichier CRONTAB
$ crontab -e

 

A partir de maintenant, vos certificats seront toujours à jour.