Obtenir gratuitement un certificat SSL reconnu par l'ensemble des navigateurs avec Let's Encrypt

avatar-Nicolas Nicolas
Publié le

Vous en avez assez des messages des navigateurs vous rappelant que vous êtes pauvre car votre site n'a pas de certificat SSL valide (vous l'avez probablement auto-signé pour pouvoir utiliser le chiffrement du HTTPS sans avoir à débourser des sommes folles pour qu'une autorité de certification vous délivre un “vrai” certificat) ?

Alors bonne nouvelle, l’Internet Security Research Group s'est donnée pour mission, je cite :

de réduire les barrières financières, technologiques pour sécuriser les communications sur Internet.

Ce groupe est constitué notamment de représentants d'Akamai, Mozilla ou encore Cisco, rien que ça !

Let's Encrypt

Avec le service Let's Encrypt, leur objectif est de massifier l'utilisation du HTTPS en le rendant accessible à tous :

  • en automatisant les tâches de création/validation/renouvellement du certificat, configuration des serveurs, …
  • en le proposant gratuitement (ce qui vous intéresse).

Installation

Alors on y va, on commence par cloner le dépôt Git présent sur Github :

cd /usr/local/bin
sudo git clone https://github.com/letsencrypt/letsencrypt

Et c'est fini !

Création du certificat

On appelle la fonction de création de certificat spécifique à Apache :

cd /usr/local/bin/letsencrypt
./letsencrypt-auto run --apache -m vous@votrefournisseurmail.tld --renew-by-default --agree-tos --no-redirect -d votredomaine.tld -d www.votredomaine.tld -d unautresousdomaine.votredomaine.tld

Ça mouline un long moment, et voilà ! Les certificats sont déposés dans le répertoire : /etc/letsencrypt/live/votredomaine.tld/

Pour détailler un peu les paramètres passés :

  • ./letsencrypt-auto est la commande de base,
  • run indique qu'on veut lancer "pour de vrai",
  • --apache indique que l'on veut mettre à jour les fichiers de configuration des virtual hosts (cela fonctionne pour Apache 2.4),
  • -m vous@votrefournisseurmail.tld fournit votre adresse mail pour votre compte Let’s Encrypt ; c'est avec cette adresse que vous serez contacté (pour le renouvellement, pour l'assistance, ...),
  • --renew-by-default permet lorsque vous relancez la commande d'orienter sur le processus de renouvellement plutôt que création,
  • --agree-tos indique vous acceptez les conditions d'utilisations du service Let’s Encrypt,
  • --no-redirect est un paramètre indiquant que vous ne souhaitez pas faire de redirection http → https systématiquement (personnellement je préfère le gérer séparément pour chaque virtual host),
  • -d votredomaine.tld est le nom du domaine pour lequel vous souhaitez un certificat, si vous voulez couvrir plusieurs sous-domaines avec le même certificat, il suffit d'écrire autant de fois ce paramètre que vous avez de sous-domaines à certifier.

On va vérifier que la configuration des virtual hosts a bien été effectuée, normalement la commande suivante vous retourne 2 lignes (SSLCertificateFile et SSLCertificateKeyFile) pour chaque virtual host :

grep '/etc/letsencrypt/live' /etc/apache2/sites-enabled/*.conf

Renouvellement

Les certificats sont valables 90 jours, il faut donc prévoir leur renouvellement via un job Cron (tous les 2 mois pour être tranquille) :

crontab -e

Puis y saisir :

0 0 1 */2 * /usr/local/bin/letsencrypt/letsencrypt-auto run --apache -m vous@votrefournisseurmail.tld --renew-by-default --agree-tos --no-redirect -d votredomaine.tld -d www.votredomaine.tld -d unautresousdomaine.votredomaine.tld

Certains ont écrit des scripts plus évolués qui permettent de vérifier plus régulièrement la durée de validité restante et de déclencher le renouvellement quand il arrive à un certain seuil, c'est notamment pratique afin de gérer les cas où le renouvellement rencontre une erreur et de prévenir par mail l'administrateur quand le délai devient critique. Si cela vous intéresse : Google est votre ami ☺

Un dernier point : la création/renouvellement de certificat n'est valable que pour des sites accessibles sur internet, autrement dit : un site qui n'est accessible que sur votre réseau local n'est pas éligible à la certification via Let's Encrypt.