Let’s Encrypt et ISPConfig 3 – Installer un certificat SSL valide gratuitement

Publié le
Mis à jour le

[ Edité le 15/03/2017 ]
IMPORTANT : Cet article est obsolète ! Let’s Encrypt est à présent nativement intégré dans la version 3.1+ d’ISPConfig. Pour l’activer, il suffit de suivre la procédure d’installation suivante :

mkdir /opt/certbot
cd /opt/certbot
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto

Lorsque le programme d’installation certbot de Let’s Encrypt vous demande si vous souhaitez configurer vos sites, choisissez « Non ». C’est ISPConfig qui se chargera de cette tâche automatiquement.

Pour activer Let’s Encrypt sur vos sites gérés par ISPConfig, il suffit de vous rendre dans l’onglet « Sites », de choisir un site et dans l’onglet par défaut « Domaine », cochez les cases « SSL » et « Let’s Encrypt » comme sur l’image ci-dessous :

Si vous aviez installé des certificats avec la méthode décrite ci-dessous, vous devez désactiver le SSL sur chacun de vos sites (temporairement) et supprimer les liens symboliques et les options Apache2 supplémentaires de chacun de vos sites au risque de subir un crash de votre serveur web.
Sur certaines configurations, il est possible que vous ayez à supprimer le dossier « /etc/letsencrypt » pour repartir sur une configuration propre et fonctionnelle de Let’s Encrypt. Sans quoi, Let’s Encrypt refusera de s’activer sur ISPConfig.
Source : howtoforge.com

[ Article original ]

Si vous avez suivi l’actualité de la sécurité web, vous n’avez pas pu passer à côté du projet de certification SSL simplifié et gratuit de la « Linux Foundation ». Ce projet est soutenu par de grands acteurs du web tel que Mozilla, Google Chrome, OVH, Cisco et Facebook pour ne citer qu’eux. Il propose de fournir gratuitement et facilement des certificats SSL reconnus validant le domaine (DV) et facilement renouvelables. Une initiative ambitieuse qui va dans le sens de la sécurité des données sur internet. Nous l’avons récemment installé sur notre propre site, il était donc de circonstance d’en faire un article maintenant que le projet est en Beta Public.

La génération d’un certificat avec Let’s Encrypt est extrêmement simple, à condition de réussir à intégrer celui-ci à son site et à automatiser le processus de renouvellement pour profiter pleinement des avantages de ce service. Si vous utilisez ISPConfig3, vous êtes au bon endroit. Je vais vous expliquer comment faire cohabiter Let’s Encrypt et ISPConfig3 en quelque étapes simples.

Installation et génération d’un certificat Let’s Encrypt

Nous allons cloner le projet Let’s Encrypt avec git puis créer un certificat qui validera monsite.com, www.monsite.com et autre-domaine.com. Utilisez l’option -d pour ajouter autant de domaines que vous le souhaitez.

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly -d monsite.com -d www.monsite.com -d autre-domaine.com

Voilà, vous avez généré votre certificat SSL valide pour les différents sites spécifiés après l’option -d. Je pense réellement qu’on ne peut pas faire plus simple et plus efficace.
Si vous souhaitez avoir plus d’informations sur les options de letsencrypt-auto, je vous invite à lire la documentation officielle.

Notez que les certificats sont générés dans le répertoire /etc/letsencrypt/live/monsite.com/ (le répertoire prend comme référence de nom le premier domaine saisi).

Intégration du certificat à ISPConfig3

En attendant l’arrivée à maturité des premières extensions pour ISPConfig 3 (voir plus bas), je vous présente une méthode qui consiste à générer les certificats auto-signés natifs et à remplacer les fichiers crt et key par des liens symboliques vers les fichiers fullchain.pem et privkey.pem de Let’s Encrypt. C’est la méthode en place sur ce site. Elle va nous permettre de mettre à jour automatiquement le certificat à l’aide de crontab.

  • Connectez-vous à votre panneau ISPConfig et atteignez les paramètres du site web que vous souhaitez certifier.
  • Activez SSL en cochant la case dans l’onglet « Domaine » :

 

  • Passez ensuite à l’onglet « SSL » et remplissez les informations que vous pouvez si vous le souhaitez :
  • Sélectionnez « Créer le certificat » à la ligne « Action SSL » puis enregistrez :
  • Patientez un moment le temps que le système génère votre certificat (généralement moins de 5 minutes). Vous constaterez alors que les cases « Clé SSL, Requête SSL et Certificat SSL » sont remplies et que le répertoire /var/www/monsite.com/ssl/ contient 4 fichiers (.csr, .crt, .key, .key.org).
  • 2 solutions s’offrent alors à vous :
    • Soit vous respectez le fonctionnement d’ISPConfig 3 au détriment de la mise à jour automatique du certificat SSL de Let’s Encrypt et dans ce cas là vous copiez-collez le contenu du fichier /etc/letsencrypt/live/monsite.com/privkey.pem dans « Clé SSL » ainsi que le contenu de /etc/letsencrypt/live/monsite.com/fullchain.pem dans « Certificat SSL » via l’interface d’administration (mais vous devrez refaire la manipulation tous les 3 mois pour actualiser le certificat avant expiration) ;
    • Soit vous liez les fichiers générés par ISPConfig pour les faire pointer vers ceux de Let’s Encrypt en utilisant un lien symbolique et de cette manière le certificat sera automatiquement mis à jour sans intervention de votre part.
  • C’est la seconde solution qui nous intéresse ici. Rendez-vous dans le dossier /var/www/monsite.com/ssl/ et renommez (ou supprimez) les fichiers monsite.com.crt et monsite.com.key.
  • Saisissez les commandes suivantes en adaptant « monsite.com » en fonction de votre cas :
ln -s /etc/letsencrypt/live/monsite.com/privkey.pem /var/www/monsite.com/ssl/monsite.com.key
ln -s /etc/letsencrypt/live/monsite.com/cert.pem /var/www/monsite.com/ssl/monsite.com.crt
service apache2 reload
  • ISPConfig ne génère que les lignes SSLCertificateFile et SSLCertificateKeyFile dans la configuration Apache2. Pour que Let’s Encrypt fonctionne correctement (principalement sur les mobiles), il a besoin de la ligne SSLCertificateChainFile. Nous allons ajouter ceci dans la liste des directives Apache en allant dans l’onglet « Options » du site ISPConfig :
<IfModule mod_ssl.c>
SSLCertificateChainFile /etc/letsencrypt/live/monsite.com/fullchain.pem
</IfModule>

C’est tout pour la liaison du certificat Let’s Encrypt à ISPConfig 3.
IMPORTANT : ne réenregistrez pas le certificat par ISPConfig sinon le certificat Let’s Encrypt sera écrasé !

Concernant l’extension, il en existe une disponible sur github ici et distribuée par alexalouit. Cependant, le projet étant jeune (moins de 3 mois), je préfère attendre la maturité d’une bonne année avant de l’intégrer à mon serveur de production. C’est donc à vous de voir (à vos risques et périls).

Renouvellement automatique du certificat avec crontab

[ Edité le 02/05/2016 ]

 

  • Voir l'ancienne version

    Là où Let’s Encrypt excelle vraiment, c’est qu’il propose un système de renouvellement des contrats entièrement automatisé. Il suffit simplement de ré-exécuter la commande de génération et il mettra à jour le certificat. Pour ne pas être obligé de le faire à la main, crontab peut nous aider à réaliser cette action mais il faut prendre soin de forcer la validation de certains choix comme par exemple si l’on souhaite faire un renouvellement. Ajoutez donc –renew-by-default et vous n’aurez plus de problème. J’ai personnellement choisi de renouveler le certificat tous les mois à 2h30 du matin. Prenez en compte le fait qu’il n’est autorisé de régénérer un certificat qu’une fois tous les 7 jours et que le certificat n’est valide que 3 mois.

    30 2 1 * * /root/letsencrypt/letsencrypt-auto certonly –renew-by-default -d monsite.com -d www.monsite.com -d autre-site.com >> /var/log/letsencrypt-renewer.log

Là où Let’s Encrypt excelle vraiment, c’est qu’il propose un système de renouvellement des contrats entièrement automatisé. Il suffit simplement d’exécuter la commande « ./letsencrypt renew » et il mettra à jour tous les certificats de votre serveur d’un coup. Notez cependant que Let’s Encrypt utilise le port 80 pour renouveler les certificats. De ce fait il faut arrêter temporairement votre serveur web (ici Apache 2), exécuter la commande de renouvellement et relancer le serveur web. Pour ce faire j’ai personnellement opté pour un script bash que j’exécute périodiquement par crontab tous les mois à 2h30 du matin. Par ailleurs, prenez en compte le fait que Let’s Encrypt ne renouvelle que les certificats qui arrivent à expiration dans moins de 30 jours et que le certificat n’est valide que 3 mois.

#!/bin/sh
/etc/init.d/apache2 stop
/root/letsencrypt/letsencrypt-auto renew
/etc/init.d/apache2 start
crontab -e
30 2 1 * * /root/letsencrypt_renew.sh >> /var/log/letsencrypt-renewer.log

Si vous souhaitez forcer l’utilisation d’https et assurer la bonne continuité du référencement de votre site, ajoutez ces lignes dans votre fichier .htaccess ou dans votre vhost apache2 :

# Redirection http vers https par 301
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L,QSA]

J’espère que ce petit tutoriel vous aura été utile, n’hésitez pas à partager vos astuces et remarques dans les commentaires.

Liens