Let's Encrypt avec Apache

Let’s encrypt c’est quoi ?

Let’s Encrypt est une autorité de certification fournissant des certificats gratuits X.509 pour le protocole TLS.

Le projet vise à généraliser l’usage de connexions sécurisées sur l’internet et de réduire de manière significative la complexité de la mise en place et de la maintenance du chiffrement TLS.

A propos de CertBot

Certbot est un client pour Let’s Encrypt. Il récupère et déploie automatiquement les certificats SSL/TLS sur votre serveur web.

CertBot fonctionne également avec toutes autres CA qui prennent en charge le protocole ACME.

Configuration d’Apache

Vous devez au préalable configurer le site qui devra obtenir un certificat dans Apache. Ce dernier doit posséder un enregistrement DNS valide pour être accessible via son adresse http.

Note : Il semblerait que Let’s Encrypt ne liste pas les sites possédant déjà un vhost en https

Générer un certificat Let’encrypt (Debian Wheezy)

Installation

Allez, par exemple, dans votre répertoire personnel et créez un clone avec la commande git

# git clone https //github.com/letsencrypt/letsencrypt 

Se positionner ensuite dans le répertoire nouvellement créé.

# cd letsencrypt/

Création de certificat

Lancer le script pour créer les certificats

# ./certbot-auto

Upgrading certbot-auto 0.8.1 to 0.9.3...
Replacing certbot-auto...
Creating virtual environment...
Installing Python packages…

Une interface vous demandera ensuite de choisir les sites qui nécessiteront un certificat. Ici on choisi uniquement monSite.fr.

(note : il est possible d’en sélectionner plusieurs pour tout faire en une seule fois, il semblerait cependant qu’il ne soit pas possible de choisir le nom de son certificat, ainsi le certificat peut s’appeler ftp.monsite.com au lieu de monsite.com. Ce n’est en rien gênant pour son bon fonctionnement, cependant si vous souhaitez que le certificat adopte le même nom que votre nom de domaine je vous conseille de faire une première demande avec le nom de domaine et d’ensuite étendre le certificat avec les sous-domaines.)

Si c’est la 1ère utilisation on vous demandera votre email afin de recevoir les notifications d’expiration de vos certificats pour les renouveler. Il faut également accepter les conditions d’utilisations.

Il est possible en une seule manipulation de de tout faire d’un seul coup.

Si c’est une première utilisation 

# ./certbot-auto --apache -d example1.com -d www.example2.com -d example3.com –-email votreEmail –-agree-tos

Si vous avez déjà inscrit une adresse mail et accepter les CGU 

# ./certbot-auto --apache -d example1.com -d www.example2.com -d example3.com

Choisir si vous voulez exclusivement du https pour votre site ou si vous autorisez les deux accès (http/https)

Bravo ! Vous pouvez dès à présent accéder à votre site en https.

Vous pouvez vous rendre sur votre site en https !

Votre certificat sera valable pour 3 mois (90 jours), après ce délais il faudra le renouveler.

Test qualité de votre certificat

Vous pouvez vérifier si vote site passe le test qualité SSL

https //www.ssllabs.com/ssltest/analyze.html?d=VOTRESITE.DOMAIN

https //www.ssllabs.com/ssltest/index.html

Le maximum étant la note de A+

Détails des certificats et clés

Les certificats, chaînes et clés se trouvent dans le dossier /etc/letsencrypt/live/monSite.fr/

# ls -l /etc/letsencrypt/live/monSite.fr/
total 0
lrwxrwxrwx 1 root root 39 nov. 11 18 49 cert.pem -> ../../archive/monSite.fr/cert.pem
lrwxrwxrwx 1 root root 40 nov. 11 18 49 chain.pem -> ../../archive/monSite.fr/chain.pem
lrwxrwxrwx 1 root root 44 nov. 11 18 49 fullchain.pem -> ../../archive/monSite.fr/fullchain.pem
lrwxrwxrwx 1 root root 42 nov. 11 18 49 privkey.pem -> ../../archive/monSite.fr/privkey.pem/

qui sont des liens symboliques vers les fichiers présents dans /etc/letsencrypt/archive/monSite.fr/

# ls -l /etc/letsencrypt/archive/monSite.fr/
total 16
-rw-r--r-- 1 root root 1814 nov. 11 18 49 cert.pem
-rw-r--r-- 1 root root 1647 nov. 11 18 49 chain.pem
-rw-r--r-- 1 root root 3461 nov. 11 18 49 fullchain.pem
-rw-r--r-- 1 root root 1708 nov. 11 18 49 privkey.pem

Vous verrez en allant dans votre répertoire Apache /etc/apache2/sites-available/ un nouveau fichier nommé monSite.fr-le-ssl.conf, il a été créé par CertBot pour configurer le https et contient les liens vers les certificats vus précédemment.

# ls -l /etc/apache2/sites-available/
total 96
-rw-r--r-- 1 root root 2165 nov. 15 10 53 monSite.fr
-rw-r--r-- 1 root root 2595 nov. 15 10 56 monSite.fr-le-ssl.conf

Si vous avez choisi l’option « Secure » vous constaterez également que le fichier original monSite.fr a été modifié avec une redirection vers le https.

Si vous le souhaitez il est possible de tout configurer dans le même fichier (monSite.fr), vous pouvez le faire de la façon suivante 

<VirtualHost * 80>
ServerName monSite.fr
ServerAlias www.monSite.fr
ServerAlias ftp.monSite.fr
RewriteEngine on
RewriteCond %{SERVER_NAME} =monSite.fr [OR]
RewriteCond %{SERVER_NAME} =www.monSite.fr
RewriteRule ^ https //%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>

<VirtualHost * 443>
ServerName monSite.fr
ServerAlias www.monSite.fr
ServerAlias ftp.monSite.fr
ServerAdmin [email protected]
DocumentRoot /home/monSite.fr/www

SSLCertificateFile /etc/letsencrypt/live/monSite.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/monSite.fr/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/monSite.fr/chain.pem

[…]

</VirtualHost>
</IfModule>

Il faudra par la suite supprimer les deux fichiers monSite.fr-le-ssl.conf, un sité dans le répertoire /sites-enable et l’autre dans /site-avaible

# rm /etc/apache2/sites-available/monSite.ovh-le-ssl.conf
rm /etc/apache2/sites-enabled/monSite.ovh-le-ssl.conf

et ensuite relancer Apache

# service apache2 reload

Étendre un certificat

Vous pouvez ajouter des domaines à un certificat déjà présent, pour se faire lancer la commande :

# ./certbot-auto

La liste des vhost va s’afficher, il vous suffira de sélectionner un nom de domaine qui contiendra déjà un certificat et d’y ajouter vos nouveaux nom de (sous)domaines 

Sélectionner « étendre »

Choisir si vous voulez exclusivement du https pour votre site ou si vous autorisez les deux accès (en http et https)

Le certificat a bien été étendu / renouvelé.

Renouvelez un certificat

Pour obtenir une nouvelle version d’un certificat, exécutez simplement certbot-auto avec l’option certonly.

# ./certbot-auto --apache certonly

Version en ligne de commande

# ./certbot-auto --apache certonly
# Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1 Place files in webroot directory (webroot)
2 Spin up a temporary webserver (standalone)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel) 2
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel) 2

-------------------------------------------------------------------------------
One or more of the entered domain names was not valid

2 Requested name 2 is an IP address. The Let's Encrypt certificate authority
will not issue certificates for a bare IP address.

Would you like to re-enter the names?
-------------------------------------------------------------------------------
(Y)es/(N)o y
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel) espace42.com, www.espace42.com
Obtaining a new certificate
Performing the following challenges
tls-sni-01 challenge for espace42.com
tls-sni-01 challenge for www.espace42.com

-------------------------------------------------------------------------------
Could not bind TCP port 443 because it is already in use by another process on
this system (such as a web server). Please stop the program in question and then
try again.
-------------------------------------------------------------------------------
(R)etry/(C)ancel r
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits) /etc/letsencrypt/keys/0013_key-certbot.pem
Creating CSR /etc/letsencrypt/csr/0013_csr-certbot.pem

IMPORTANT NOTES
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/espace42.com/fullchain.pem. Your cert will
expire on 2017-05-04. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- 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

Vous pouvez aussi exécuter cette commande et directement préciser les noms de domaine en question.

# ./certbot-auto certonly -d monSite.fr -d ftp.monSite.fr -d www.monSite.fr

Si votre délais n’est pas complètement expiré vous pouvez choisir de le conserver. A savoir que la création de certificat est limité à 5 tous les 7 jours.

Version en ligne de commande

# ./certbot-auto --apache certonly
# Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1 aline.***
2 ftp.aline.***
3 www.aline.***
4 aline***.fr
5 ftp.aline***.fr
[...]
41 monblogde-linux.com
42 www.monblogde-linux.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel) c
Please specify --domains, or --installer that will help in domain names autodiscovery, or --cert-name for an existing certificate name.

ou comme ceci

# ./certbot-auto --apache -d monSite.fr -d www.monSite.fr
# Saving debug log to /var/log/letsencrypt/letsencrypt.log
Obtaining a new certificate
Performing the following challenges
tls-sni-01 challenge for monSite.fr
tls-sni-01 challenge for www.monSite.fr
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits) /etc/letsencrypt/keys/0018_key-certbot.pem
Creating CSR /etc/letsencrypt/csr/0018_csr-certbot.pem
Created an SSL vhost at /etc/apache2/sites-available/monSite.fr-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/monSite.fr-le-ssl.conf
Enabling available site /etc/apache2/sites-available/monSite.fr-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/monSite.fr-le-ssl.conf

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1 Easy - Allow both HTTP and HTTPS access to these sites
2 Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel) 2
Enhancement redirect was already set.
Enhancement redirect was already set.

-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https //monSite.fr and
https //www.monSite.fr

You should test your configuration at
https //www.ssllabs.com/ssltest/analyze.html?d=monSite.fr
https //www.ssllabs.com/ssltest/analyze.html?d=www.monSite.fr
-------------------------------------------------------------------------------

IMPORTANT NOTES
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/monSite.fr/fullchain.pem. Your cert will
expire on 2017-05-04. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again with the
"certonly" option. To non-interactively renew *all* of your
certificates, run "certbot-auto renew"
- Some rewrite rules copied from
/etc/apache2/sites-available/monSite.fr were disabled in the vhost
for your HTTPS site located at
/etc/apache2/sites-available/monSite.fr-le-ssl.conf because they
have the potential to create redirection loops.
- 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

Renouvelez tous vos certificats en même temps

Pour renouveler de façon non interactive tous vos certificats, exécutez certbot-auto renew

# ./certbot-auto renew

Si vos certificats sont encore trop récents vous allez avoir ce message :

# -----------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/monSite.ovh.conf
-----------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet
/etc/letsencrypt/live/monSite.fr/fullchain.pem (skipped)
No renewals were attempted.

En ligne de commande :

# ./certbot-auto renew
# Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/monSite.ovh.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges
tls-sni-01 challenge for monSite.ovh
tls-sni-01 challenge for ftp.monSite.ovh
tls-sni-01 challenge for www.monSite.ovh
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits) /etc/letsencrypt/keys/0014_key-certbot.pem
Creating CSR /etc/letsencrypt/csr/0014_csr-certbot.pem

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/monSite.ovh/fullchain.pem
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/espace42.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/lesSuperMails.com.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges
tls-sni-01 challenge for postfixadmin.lesSuperMails.com
tls-sni-01 challenge for lesSuperMails.com
tls-sni-01 challenge for imap.lesSuperMails.com
tls-sni-01 challenge for mail2.lesSuperMails.com
tls-sni-01 challenge for rainloop.lesSuperMails.com
tls-sni-01 challenge for roundcube.lesSuperMails.com
tls-sni-01 challenge for smtp.lesSuperMails.com
tls-sni-01 challenge for www.lesSuperMails.com
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits) /etc/letsencrypt/keys/0015_key-certbot.pem
Creating CSR /etc/letsencrypt/csr/0015_csr-certbot.pem

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/lesSuperMails.com/fullchain.pem
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/kitten.ovh.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges
tls-sni-01 challenge for kitten.ovh
tls-sni-01 challenge for www.kitten.ovh
Waiting for verification…
Cleaning up challenges
Generating key (2048 bits) /etc/letsencrypt/keys/0016_key-certbot.pem
Creating CSR /etc/letsencrypt/csr/0016_csr-certbot.pem

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/kitten.ovh/fullchain.pem
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/aptgetinstall.com.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges
tls-sni-01 challenge for aptgetinstall.com
tls-sni-01 challenge for www.aptgetinstall.com
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits) /etc/letsencrypt/keys/0017_key-certbot.pem
Creating CSR /etc/letsencrypt/csr/0017_csr-certbot.pem

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/aptgetinstall.com/fullchain.pem
-------------------------------------------------------------------------------

The following certs are not due for renewal yet
/etc/letsencrypt/live/espace42.com/fullchain.pem (skipped)
Congratulations, all renewals succeeded. The following certs have been renewed
/etc/letsencrypt/live/monSite.ovh/fullchain.pem (success)
/etc/letsencrypt/live/lesSuperMails.com/fullchain.pem (success)
/etc/letsencrypt/live/kitten.ovh/fullchain.pem (success)
/etc/letsencrypt/live/aptgetinstall.com/fullchain.pem (success)

Suppression de certificat

Note : Cette méthode est un peu barbare. J’ai dû m’en servir suite à plusieurs tests pour comprendre le fonctionnement de Let’s Encrypt. Je suppose qu’il doit exister un autre moyen de supprimer des certificats.

=> OUI
@TODO : Supprimer proprement un certificat

Attention : Les commandes ci dessous vont supprimer TOUS les certificats AINSI QUE les clés privées, la configuration pour le renouvellement et les fichiers de logs. A lancer que si on a une bonne raison !

Cette manipulation devrait supprimer toutes traces de certificats

# 
rm -rf ~/.local/share/letsencrypt
rm -rf /etc/letsencrypt
rm -rf /var/log/letsencrypt
rm -rf /var/lib/letsencrypt
(optionnel) rm -rf /path/to/your/git/clone/directory

Automatisation 

# #!/bin/bash

echo -e "
------------------------------------------------------------------------------
Attention Ce script va supprimer absolument tout ce qui concerne Let's Encrypt

A savoir /path/to/your/git/clone/directory (désactivé)
~/.local/share/letsencrypt
/etc/letsencrypt
/var/log/letsencrypt
/var/lib/letsencrypt

Etes vous sur de VOULOIR continuer ? oui / non
------------------------------------------------------------------------------
"
read reponse

if [ $reponse = "oui" ]
then
echo "Veuillez CONFIRMER votre choix - Suppression des fichiers ? oui / non"
read confirmation

if [ $confirmation = "oui" ]
then
echo "*********Suppression**********"
#rm -rf /path/to/your/git/clone/directory
rm -rf ~/.local/share/letsencrypt
rm -rf /etc/letsencrypt
rm -rf /var/log/letsencrypt
rm -rf /var/lib/letsencrypt
else
echo "Suppression annulée"
fi

else
echo "Fin du script, rien n'a été supprimé"
exit 0
fi

Documentation

https//fr.wikipedia.org/wiki/Let%27s_Encrypt

> Partager <