Let’s Encrypt – Générer mes certificats SSL

Let’s Encrypt est une autorité de certification gratuite, automatisée et libre. C’est une organisation délivrant des certificats SSL, légitimes sur le web, par tous les services et navigateurs. Let’s encrypt est gratuit, vous pouvez donc générer des certificats SSL sans débourser un centime. C’est aujourd’hui la première et seule organisation délivrant des certificats SSL sans aucune souscription. Le processus de génération est automatisé, il est donc possible de créer et renouveler vos certificats via des scripts, sans aucune intervention manuelle.

Let’s Encrypt est sorti en décembre 2015, et a pour vocation de faciliter et généraliser l’utilisation de certificats SSL. Cela donne plus de liberté aux administrateurs systèmes, leur permettant de créer des certificats en quelques minutes, et permettre aux personnes ne souhaitant pas acheter de certificats de pouvoir tout de même sécuriser leurs services.

Apprenez comment l’installer, générer vos propres certificats, et les implémenter sur vos sites web.
Cet article a été rédigé pour un système Debian, mais la procédure est identique sur les distributions dérivées comme ubuntu ou mint, en ajoutant sudo devant chaque commande.

Dois je utiliser Let’s Encrypt ?

Tout d’abord, je vous conseille de lire mon guide pour tout savoir sur SSL, j’explique dans celui-ci ce qu’est un certificats SSL, et les différentes méthodes pour en créer. Un certificat auto signé est habituellement utilisé uniquement pour des tests, des serveurs de recette ou des services non accessibles au public. Dans le cas contraire, il faut utiliser un certificat provenant d’une autorité reconnue.

Et donc, dois je utiliser Let’s Encrypt ou une autorité payante ? Quelle est la principale différence ?

Réponse rapide : la principale différence entre Let’s Encrypt et une autorité tierce payante est une assurance sur les transactions financières.

Lorsque vous achetez un certificat, vous achetez également une assurance. Celle ci varie selon l’autorité et le prix du certificat, chaque organisme ayant ses règles et options. Si vous possédez un site e-commerce permettant des transactions bancaires, je vous conseille fortement d’utiliser un certificat SSL d’une autorité fournissant une assurance correspondant au montant anticipé de vos paiement en ligne.

Par contre, si vous ne proposez aucun paiement sur votre site (ou si vos paiement sont décentralisés sur un service tiers, comme votre banque), Let’s Encrypt est parfait pour vous. Il vous permettra de sécuriser vos services et de renouveler ceux-ci automatiquement, contrairement à des autorités tierces. Une fois installé, vous n’aurez plus à vous en préoccuper, il s’auto-gérera. Etre assuré de ne jamais avoir un certificat dont la date de validité est dépassée est clairement un gros bonus pour vous.

Part de marché de Let’s Encrypt

Au jour ou j’écris cet article, Let’s Encrypt a déjà délivré presque 50M de certificats actifs (47.6M certificats en décembre 2017). Il y a tout juste un an, 13% de tous les sites web utilisant un certificat SSL passaient par Let’s Encrypt. Cela le place en 3e fournisseur mondial, après Comodo et Symantec (source : cet excellent article sur son impact auprès du marché du SSL).

En moyenne, ce sont environ 600K certificats qui sont délivrés chaque jour.

1 – Installez Let’s encrypt

Pour commencer, vous devez installer Let’s Encrypt sur votre serveur. Ce programme vous permet de générer vos certificats sans connaître une seule commande OpenSSL. Vous avez juste à lancer celui ci et renseigner vos informations de certificats (nom de domaine et email de contact). Il est installable depuis github, vous aurez donc besoin d’installer git en premier lieu (s’il n’est pas déjà présent) :

apt install git

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt --depth=1

Let’s Encrypt est maintenant disponible sur votre serveur, dans le dossier /opt/letsencrypt/.

2 – Générez vos certificats SSL

Let’s Encrypt devra communiquer avec l’autorité principale pour valider votre nom de domaine. Il aura donc besoin d’un serveur web présent pour effectuer cette vérification. Il existe 2 moyens pour cela : configurer votre propre serveur web pour rediriger toute requête de Let’s Encrypt, ou utiliser le serveur web intégré à Let’s Encrypt. La seconde solution étant la plus simple, nous utiliserons celle ci. Elle nécessitera néanmoins de couper votre serveur web durant quelques secondes.

cd /opt/letsencrypt/

service nginx stop

Vous pouvez maintenant générer vos certificats SSL. Je conseille fortement d’utiliser une clé RSA de 4096 bits (avec l’argument rsa-key-size). Indiquez votre nom de domaine avec l’argument d (ici www.isicca.com). Attention, le nom de domaine utilisé doit pointer vers votre serveur.

Lors du premier lancement, Let’s Encrypt téléchargera tous les paquets nécessaires à la génération, laissez le s’occuper de tout pour vous.

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): xxx@isicca.com

-------------------------------------------------------------------------------
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-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

-------------------------------------------------------------------------------
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 EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for www.isicca.com
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.isicca.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.isicca.com/privkey.pem
Your cert will expire on 2018-03-19. To obtain a new or tweaked
version of this certificate in the future, simply run
letsencrypt-auto again. To non-interactively renew *all* of your
certificates, run "letsencrypt-auto 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 maintenant prêts et disponibles dans le dossier mentionné. Vous y trouverez les fichiers fullchain.pem, contenant à la fois le certificat public et la chaîne d’autorité, et la clé privée privkey.pem.

ls -hal /etc/letsencrypt/live/www.isicca.com/

Vous pouvez maintenant redémarrer votre serveur web

service nginx start

3 – Renouvelez vos certificats

Par défaut, les certificats générés ont une durée de validité de 3 mois. Bien qu’il soit possible de leur donner une période plus longue lors de la génération, il faudra, à un moment donné, les renouveler.

Il possible de renouveler tous les certificats présents sur le serveur, ou de spécifier un certificat particulier. Pour automatiser ce process, le plus simple est d’utiliser cron :

vi /etc/crontab

//renouveler un certificat mensuellement
00 0 1 * * root service nginx stop && /opt/letsencrypt/letsencrypt-auto certonly --quiet --standalone --renew-by-default -d www.isicca.com && service nginx start
//renouveler tous les certificats mensuellement
00 0 1 * * root service nginx stop && /opt/letsencrypt/letsencrypt-auto renew --quiet && service nginx start

4 – Implementez vos certificats dans Nginx ou Apache

Il est assez simple d’implémenter vos certificats SSL dans votre serveur web. Avec Nginx, il suffit juste de changer le port (ou d’ajouter un nouveau vhost) et d’indiquer dans quel dossiers trouver les certificats. La méthode est la même pour Apache, mais il faudra également activer le module ssl avant.

Si vous ne possédez pas encore de serveur web, je vous conseille de lire mon article sur comment installer et configurer LEMP facilement en 4 étapes.

 

4.1 – Nginx

Editer votre vhost avec les paramètres suivants :

vi /etc/nginx/sites-available/website

server {
server_name www.isicca.com;
listen 443 ssl;
ssl_protocols TLSv1.2;
ssl_certificate /etc/letsencrypt/live/www.isicca.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.isicca.com/privkey.pem;
root /var/www/;
index index.php;
}

4.2 – Apache

Premièrement, activez le module SSL, puis, désactivez le vhost SSL fournit par défaut. Ajoutez enfin ces paramètres dans votre configuration :

a2enmod ssl && a2dissite default

vi /etc/apache2/sites-available/website.conf

<VirtualHost *:443>
ServerName www.isicca.com
DocumentRoot /var/www
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/www.isicca.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.isicca.com/fullchain.pem
</VirtualHost>

Finalement, activez le vhost, et relancez Apache :

a2ensite website && service apache2 reload

5 – Plus d’options pour maîtriser Let’s Encrypt comme un pro

5.1 – Générer un certificat pour plusieurs domaines

Il est bien sur possible d’indiquer plusieurs domaines à prendre en charge pour un seul certificat. Ces domaines peuvent être différents, ou il peut s’agir just de sous domaines :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com,isicca.com,subdomain.isicca.com,anotherdomain.com

5.2 – Générer un certificat wildcard

Les certificats wildcard seront pris en charge par Let’s Encrypt à partir de février 2018.

5.3 – Utiliser des hooks pour contrôler votre serveur web

Personnellement, je préfère utiliser les commandes de mon serveur pour stopper et démarrer Nginx, mais Let’s encrypt peut gérer cette partie pour nous :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --pre-hook "service nginx stop" --post-hook "service nginx start"

5.4 – Choisir HTTP ou HTTPS pour le serveur web intégré à Let’s Encrypt

Par défaut, le serveur web intégré écoute sur le port 80 (HTTP). Voici comment changer l’écouter pour le port 443 (HTTPS) :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --preferred-challenges tls-sni

5.4 – Générer des certificats depuis un serveur tiers

Si vous n’avez pas accès au terminal de votre serveur, vous pouvez également générer les certificats depuis un autre ordinateur. Dans ce cas, le nom de domaine à sécuriser n’a pas besoin de rediriger vers ce nouveau poste. Il suffit d’indiquer une entrée dans votre configuration DNS et générer manuellement le certificat :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --manual --preferred-challenges dns

5.5 – Ajouter des noms de domaine à un certificat existant

Vous possédez déjà un certificat et souhaitez ajouter un nom de domaine à celui ci :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone --cert-name www.isicca.com -d isicca.com

5.6 – Forcer le renouvellement d’un certificat

Si vous essayez de renouveler un certificat, Let’s Encrypt peut refuser la manipulation s’il considère que cela n’est pas nécessaire (plusieurs mois avant la fin de la validité de celui ci par exemple). Mais il est heureusement possible de forcer le renouvellement :

/opt/letsencrypt/letsencrypt-auto certonly --quiet --standalone --force-renewal -d www.isicca.com

5.7 – Révoquer un certificat

Si votre clé est compromise, vous pouvez révoquer votre certificat :

/opt/letsencrypt/letsencrypt-auto revoke --cert-path /etc/letsencrypt/live/www.isicca.com/fullchain.pem --reason keycompromise

Il est également possible de le supprimer totalement du système :

/opt/letsencrypt/letsencrypt-auto delete --cert-name www.isicca.com

5.8 – Changer la rotation des logs

Par défaut, Let’s Encrypt créera un nouveau fichier de log après 1000 entrées dans celui ci. Pour changer cette valeur, il existe un argument spécifique :

/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --standalone -d www.isicca.com --max-log-backups 99

Conclusion

Félicitations, vous avez maintenant générer vos propres certificats avec let’s Encrypt, et sécuriser vos serveurs web avec ceux ci.

 

Sources

Laisser un commentaire