Let's Encrypt : Mise en place
Table des matières
Let's Encrypt est une autorité de certification qui fournit des certificats gratuits X.509 pour le protocole cryptographique TLS au moyen d'un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l'installation et le renouvellement des certificats pour la sécurisation des sites internet. Le projet vise à généraliser l'usage de connexions sécurisées sur l’internet. De nombreux sponsors soutiennent ce projet comme Cisco, Red Hat, Mozilla, Gemalto...
Il est nécessaire de satisfaire quelques prérequis pour l'installation, à savoir :
Sur centOS, mettre en service les dépôts EPEL avec yum install epel-release .
Ici, j'ai effectué mes tests sur une machine Gentoo Linux. Let's Encrypt n'est pas noté comme stable, j'ai du ajouter l'argument --debug à mes commandes.
Dans un premier temps, on clone le dépôt git :
On se rend ensuite dans le dossier en question pour exécuter ensuite les commandes :
La commande à utiliser sera ./certbot-auto au lieu de certbot
Sur CentOS, il est possible d'installer le paquet certbot présent dans EPEL :
Sur Gentoo, on peut installer app-crypt/certbot :
Je vais ici utiliser la commande «oneliner» qui est plus simple à utiliser :
- certonly : ne générer que le certificat
- -d oxygen.linuxtricks.fr : le domaine à certifier
- -m [email protected] : email associé au certificat
- --agree-tos : accepter les conditions d'utilisation
- -a webroot : Obtenir un certificat en écrivant dans la racine d'un serveur fonctionnel (apache par exemple)
- -a standalone : Obtenir un certificat en lançant un serveur web autonome (port 80 doit être dispo, et pas d'apache l'utilisant)
- --webroot-path /var/www/localhost/htdocs/ : la racine du site en question (pour webroot) ou un dossier dispo (standalone) pour écrire les fichiers nécessaires
Une fois fait, on a un super message nous indiquant que l'opération a été faite avec succès :
Les fichiers se créent dans /etc/letsencrypt/live/nom-du-domaine.
On a plusieurs fichiers :
- privkey.pem : c’est la clé privée pour le certificat. Doit être gardé secret. Le serveur doit y accéder (SSLCertificateKeyFile)
- cert.pem : le certificat du serveur. (SSLCertificateFile) Apache < 2.4
- chain.pem : les certificats requis par le navigateur (SSLCertificateChainFile)
- fullchain.pem : tous les certificats (chain.pem + cert.pem). Apache >= 2.4 (SSLCertificateFile)
Il faut ensuite configurer apache, pour renseigner le certificat nouvellement généré. Editer votre fichier de virtualhost (peut différer suivant votre OS) :
Sur Gentoo :
Sur CentOS
Et éditer ces trois lignes :
On recharge apache après :
Sous Gentoo
Sous CentOS
Pour renouveler un certificat on exécute la commande «oneliner» suivante :
En gros, la même que la première, avec --renew-by-default en plus pour éviter la question et que ça soit gérable par un script :-)
Vous regénérez tous les premiers du mois à minuit votre script et c'est joué !
Exemple :
Et dans crontab :
C'est bien, mais maintenant, voici comment, dans le virtualhost d'apache, on peut configurer pour rediriger tout le trafic vers HTTPS.
Je vous mets tout le virtualhost du site marjo21.linuxtricks.fr mais regardez uniquement à partir du commentaire #Lets Encrypt :
Sur certains CMS, il peut y avoir un problème d'accès notamment à cause de règles. (C'est le cas avec PHPBoost)
Pour cela, placer ce code suivant
Après les lignes :
Dans le cas de cette erreur :
Il suffit de supprimer le dossier local du programme :
Relancer la commande et ça devrait rouler.
Dans le cas où le site possède un fichier .htaccess, et que les URL non standards du CMS sont bloquées, le message suivant apparait :
Regardez la section Configurer le htaccess de votre CMS.
Introduction
Let's Encrypt est une autorité de certification qui fournit des certificats gratuits X.509 pour le protocole cryptographique TLS au moyen d'un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l'installation et le renouvellement des certificats pour la sécurisation des sites internet. Le projet vise à généraliser l'usage de connexions sécurisées sur l’internet. De nombreux sponsors soutiennent ce projet comme Cisco, Red Hat, Mozilla, Gemalto...
Prérequis
Il est nécessaire de satisfaire quelques prérequis pour l'installation, à savoir :
- Avoir la commande git à disposition
- Avoir un serveur connecté à Internet avec un nom de domaine pleinement qualifié (FQDN)
- Avoir les droits d'administration ... évident !
Sur centOS, mettre en service les dépôts EPEL avec yum install epel-release .
Ici, j'ai effectué mes tests sur une machine Gentoo Linux. Let's Encrypt n'est pas noté comme stable, j'ai du ajouter l'argument --debug à mes commandes.
Installation
Dans un premier temps, on clone le dépôt git :
Code BASH :
git clone https://github.com/certbot/certbot /opt/certbot
On se rend ensuite dans le dossier en question pour exécuter ensuite les commandes :
Code BASH :
cd /opt/certbot
La commande à utiliser sera ./certbot-auto au lieu de certbot
Sur CentOS, il est possible d'installer le paquet certbot présent dans EPEL :
Code BASH :
yum install certbot
Sur Gentoo, on peut installer app-crypt/certbot :
Code BASH :
emerge -av app-crypt/certbot
Génération du premier certificat
Je vais ici utiliser la commande «oneliner» qui est plus simple à utiliser :
Code BASH :
certbot certonly -d oxygen.linuxtricks.fr -m adrien.d@mageialinux-online.org --agree-tos -a webroot --webroot-path /var/www/localhost/htdocs/
- certonly : ne générer que le certificat
- -d oxygen.linuxtricks.fr : le domaine à certifier
- -m [email protected] : email associé au certificat
- --agree-tos : accepter les conditions d'utilisation
- -a webroot : Obtenir un certificat en écrivant dans la racine d'un serveur fonctionnel (apache par exemple)
- -a standalone : Obtenir un certificat en lançant un serveur web autonome (port 80 doit être dispo, et pas d'apache l'utilisant)
- --webroot-path /var/www/localhost/htdocs/ : la racine du site en question (pour webroot) ou un dossier dispo (standalone) pour écrire les fichiers nécessaires
Une fois fait, on a un super message nous indiquant que l'opération a été faite avec succès :
Citation :
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/oxygen.linuxtricks.fr/fullchain.pem. Your
cert will expire on 2016-08-14. To obtain a new version of the
certificate in the future, simply run Certbot again.
- If you like Certbot, please consider supporting our work by:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/oxygen.linuxtricks.fr/fullchain.pem. Your
cert will expire on 2016-08-14. To obtain a new version of the
certificate in the future, simply run Certbot again.
- If you like Certbot, please consider supporting our work by:
Les fichiers se créent dans /etc/letsencrypt/live/nom-du-domaine.
On a plusieurs fichiers :
- privkey.pem : c’est la clé privée pour le certificat. Doit être gardé secret. Le serveur doit y accéder (SSLCertificateKeyFile)
- cert.pem : le certificat du serveur. (SSLCertificateFile) Apache < 2.4
- chain.pem : les certificats requis par le navigateur (SSLCertificateChainFile)
- fullchain.pem : tous les certificats (chain.pem + cert.pem). Apache >= 2.4 (SSLCertificateFile)
Configurer le virtualhost sous Apache
Il faut ensuite configurer apache, pour renseigner le certificat nouvellement généré. Editer votre fichier de virtualhost (peut différer suivant votre OS) :
Sur Gentoo :
Code BASH :
vi /etc/apache2/vhosts.d/00_default_ssl_vhost.conf
Sur CentOS
Code BASH :
vi /etc/httpd/conf.d./ssl.conf
Et éditer ces trois lignes :
Code BASH :
SSLCertificateFile /etc/letsencrypt/live/www.linuxtricks.fr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.linuxtricks.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.linuxtricks.fr/chain.pem
On recharge apache après :
Sous Gentoo
Code BASH :
/etc/init.d/apache2 reload
Sous CentOS
Code BASH :
systemctl reload httpd
Renouveler un certificat
Pour renouveler un certificat on exécute la commande «oneliner» suivante :
Code BASH :
certbot certonly -d oxygen.linuxtricks.fr -m adrien.d@mageialinux-online.org --agree-tos -a webroot --webroot-path /var/www/localhost/htdocs/ --renew-by-default
En gros, la même que la première, avec --renew-by-default en plus pour éviter la question et que ça soit gérable par un script :-)
Vous regénérez tous les premiers du mois à minuit votre script et c'est joué !
Exemple :
Code BASH :
vi /root/renew-lets.sh
Code BASH :
#! /bin/bash certbot certonly -d oxygen.linuxtricks.fr -m adrien.d@mageialinux-online.org --agree-tos -a webroot --webroot-path /var/www/localhost/htdocs/ --renew-by-default systemctl reload httpd
Et dans crontab :
Code BASH :
0 0 1 * * /root/renew-lets.sh > /root/renew-lets.log
Configurer le virtualhost HTTP pour rediriger le trafic vers HTTPS
C'est bien, mais maintenant, voici comment, dans le virtualhost d'apache, on peut configurer pour rediriger tout le trafic vers HTTPS.
Je vous mets tout le virtualhost du site marjo21.linuxtricks.fr mais regardez uniquement à partir du commentaire #Lets Encrypt :
Code BASH :
<VirtualHost *:80> ServerName wwww.linuxtricks.fr ServerAlias marjo21.linuxtricks.fr DocumentRoot "/home/marjo21/public_html/" <Directory "/home/marjo21/public_html/"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> # Redirection Lets Encrypt RewriteEngine on RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/ RewriteRule (.*) https://marjo21.linuxtricks.fr$1 [R=301,L] </VirtualHost> <VirtualHost *:443> ServerName marjo21.linuxtricks.fr ServerAlias marjo21.linuxtricks.fr # Certificat Lets Encrypt SSLEngine on SSLCertificateFile /etc/letsencrypt/live/marjo21.linuxtricks.fr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/marjo21.linuxtricks.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/marjo21.linuxtricks.fr/chain.pem DocumentRoot "/home/marjo21/public_html/" <Directory "/home/marjo21/public_html/"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
Configurer le htaccess de votre CMS
Sur certains CMS, il peut y avoir un problème d'accès notamment à cause de règles. (C'est le cas avec PHPBoost)
Pour cela, placer ce code suivant
Code TEXT :
RewriteCond %{REQUEST_URI} ^/.well-known/acme-challenge/ RewriteRule "^.well-known/acme-challenge" - [L]
Après les lignes :
Code TEXT :
RewriteEngine on RewriteBase /
Quelques problèmes
ExecutableNotFound
Dans le cas de cette erreur :
Code TEXT :
An unexpected error occurred: ExecutableNotFound Please see the logfile 'certbot.log' for more details.
Il suffit de supprimer le dossier local du programme :
Code BASH :
rm -rf /root/.local/share/letsencrypt
Relancer la commande et ça devrait rouler.
Forbidden
Dans le cas où le site possède un fichier .htaccess, et que les URL non standards du CMS sont bloquées, le message suivant apparait :
Code RUBY :
Domain: www.mageialinux-online.org Type: unauthorized Detail: Invalid response from http://www.mageialinux-online.org/.well-known/acme-challenge/VxFva1I_aRm7WYwWJjeXhzqDFyvdhEvkF58_qKq0y7c: "<!DOCTYPE HTML PUBLIC -//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1>
Regardez la section Configurer le htaccess de votre CMS.