Services et serveurs

Let's Encrypt : Mise en place

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières


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 :
  1. Avoir la commande git à disposition
  2. Avoir un serveur connecté à Internet avec un nom de domaine pleinement qualifié (FQDN)
  3. 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


Génération du premier certificat



Je vais ici utiliser la commande «oneliner» qui est plus simple à utiliser :
Code BASH :
./certbot-auto certonly -d oxygen.linuxtricks.fr --email=adrien.d@mageialinux-online.org --agree-tos -a webroot --webroot-path /var/www/localhost/htdocs/ --manual-public-ip-logging-ok --debug

  • certonly : ne générer que le certificat
  • -d oxygen.linuxtricks.fr : le domaine à certifier
  • [email protected] : email associé au certificat
  • --agree-tos : accepter les conditions d'utilisation
  • -a webroot : là où va se situer l'authentification, à l racine du site
  • --webroot-path /var/www/localhost/htdocs/ : la racine du site en question
  • --manual-public-ip-logging-ok : oops, me rappelle plus
  • --debug : obligatoire sur Gentoo

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:

Il faut ensuite configurer apache, pour renseigner le certificat nouvellement généré :
Code BASH :
vi /etc/apache2/vhosts.d/00_default_ssl_vhost.conf

Et éditer ces deux lignes :
Code BASH :
SSLCertificateFile /etc/letsencrypt/live/oxygen.linuxtricks.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/oxygen.linuxtricks.fr/privkey.pem

On recharge apache après :
Code BASH :
/etc/init.d/apache2 reload


Renouveler un certificat



Pour renouveler un certificat on exécute la commande «oneliner» suivante :
Code BASH :
./certbot-auto certonly -d oxygen.linuxtricks.fr --email=adrien.d@mageialinux-online.org --agree-tos -a webroot --webroot-path /var/www/localhost/htdocs/ --renew-by-default --debug

Vous aurez constaté que --manual-public-ip-logging-ok a été remplacé par l'argument --renew-by-default qui est assez explicite.

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 marjo21.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 
        DocumentRoot "/home/marjo21/public_html/"
        <Directory "/home/marjo21/public_html/">
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
</VirtualHost>

Voici un exemple ici de la redirection HTTPS juste pour 2 dossiers : /admin et /user. Et de forçage de HTTP pour le reste du site :
Code TEXT :
<VirtualHost *:80>
        ServerName dev.mageialinux-online.org
        ServerAlias dev.mageialinux-online.org
        DocumentRoot /home/devmageia/public_html/www
        <Directory "/home/devmageia/public_html/www">
                Order allow,deny
                AllowOverride All
                Allow from all
                Options +FollowSymlinks
        </Directory>
 
        # Redirection vers sécurisé HTTPS
        RewriteEngine on
        RewriteCond %{REQUEST_URI} ^(/user|/admin)
        RewriteRule (.*) https://dev.mageialinux-online.org$1 [R=301,L]
</VirtualHost>
 
<VirtualHost *:443>
        ServerName dev.mageialinux-online.org
        ServerAlias dev.mageialinux-online.org
        DocumentRoot /home/devmageia/public_html/www/
        <Directory "/home/devmageia/public_html/www/">
                Order allow,deny
                AllowOverride All
                Allow from all
                Options +FollowSymlinks
        </Directory>
 
        # Activation SSL + Certificats Lets
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/dev.mageialinux-online.org/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/dev.mageialinux-online.org/privkey.pem
 
        ErrorLog /var/log/apache2/mageialinux/dev/error.log
        LogLevel warn
        CustomLog /var/log/apache2/mageialinux/dev/access.log combined
 
        # Redirection vers sécurisé HTTPS
        RewriteEngine on
        RewriteCond %{REQUEST_URI} !^/user
        RewriteCond %{REQUEST_URI} !^/admin
        RewriteRule (.*) http://dev.mageialinux-online.org$1 [R=301,L]
</VirtualHost>
 
 


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>
   <p"
 

Il suffit d'éditer le fichier .htaccess du site et d'ajouter le dossier concerné avant les éventuelles règles de blocage (juste après l'instruction RewriteEngine on) :
Code BASH :
RewriteCond %{REQUEST_URI} ^/.well-known/acme-challenge/
RewriteRule "^.well-known/acme-challenge" - [L]