Certificat SSL avec Let's encrypt
La méthode précédente (auto-signé son certificat) est très bien et suffisante pour le dev, excepté que notre certificat n'est pas valide. Let's Encrypt propose des certificats gratuits valides et faciles à installer.
Rendez-vous sur le site de certbot pour obtenir les instructions.
Il suffit d'entrer votre Software et votre System et l'ensemble de la procédure vous est fourni!!
Dans mon cas: un serveur Apache sur un système Ubuntu16.04.
Première étape - Installer Certbot
Ajouter le PPA Cerbot
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository universe $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update
Installer Cerbot et Cerbot-apache:
$ sudo apt-get install certbot python-certbot-apache
Etape 2 : Créer votre certificat et l'installer
Cas configuration manuelle
Vous récupérer juste le certificat et vous ferez la configuration d'Apache à la main, dans ce cas:
$ sudo certbot certonly --apache
Puis passez à l'étape 3.
Cas configuration automatique Cerbot
Vous laissez Cerbot tout configurer et il fait vraiment tout:
- récupérer le certificat let's encrypt,
- créer le fichier de l'hôte ssl,
- activer le mode ssl de Apache,
- et activer l'hôte ssl..
$ sudo certbot --apache
Il vous sera demandé le mail de l'administrateur et le nom de domaine…, mais normalement, c'est tout ce que vous avez à faire…. votre site est disponible en ssl.
Cas virtual host
S'il s'agit d'un virtual host, monsite.fr, vous pouvez taper:
$ sudo certbot --apache -d monsite.fr
Etape 3: Les fichiers de configuration
Les certificats
Cerbot place les certificats dans le dossier /etc/letsencrypt/live/monsite.fr où monsite.fr est le nom de domaine.
Les fichiers créés sont:
privkey.pem, la clé privéecert.pem, le certificat de mon domainemonsite.frchain.pem, le certificat de Let's Encryptfullchain.pem, les certificatscert.pemetchain.pemcombinés
Le fichier de mon hôte (https://monsite.fr)
Les fichiers de déclaration des hôtes sous Apache se trouve dans le dossier etc/apache2/sites-available.
Dans la version automatique, Cerbot crée automatiquement un fichier monsite.fr-le-ssl.conf correspondant à partir de la version non-cryptée.
Dans le fichier, il ajoute les informations SSL:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName monsite.fr
# ... etc
SSLCertificateFile /etc/letsencrypt/live/monsite.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/monsite.fr/privkey.pem
# les informations sur le SSL
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Le fichier /etc/letsencrypt/options-ssl-apache.conf contient le reste des informations, non spécifiques au domaine pour le SSL:
SSLEngine on # Intermediate configuration, tweak to your needs SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:........ SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire
Activer le SSL et le site
Activer le mode SSL d'Apache
$ sudo a2enmod ssl
Activer le site https://monsite.fr, (en utilisant le nom du fichier de configuration du site sans l'extension conf)
$ sudo a2ensite monsite.fr-le-ssl
Redémarrer Apache
$ sudo service apache2 restart
Etape 4: rediriger http vers https
2 possibilités: soit via la configuration de l'hôte dans Apache, soit l'ajout d'un fichier .htaccess à la racine de l'application.
Configuration apache
On ajoute la redirection dans le fichier de configuration du site http
<VirtualHost *:80> ServerName monsite.fr ServerAdmin machin@monsite.Fr Redirect permanent / https://monsite.fr/ </VirtualHost>Puis on recharge la configuration
$ sudo service apache2 reload
Configuration via un .htaccess
Dans un fichier .htaccess
Pas très conseillé dans notre cas, car nous avons plusieurs applications … Le fichier .htaccess se trouve à la racine du site, on utilise le mode rewrite.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTPS} =off
RewriteRule ^(.*)$ https://monsite.fr/$1 [R=301,L]
</IfModule>
On active le mode 'rewrite' de Apache et on redémarre Apache.
$ sudo a2enmod rewrite $ sudo service apache2 restart