Table des matières

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:

$ 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.frmonsite.fr est le nom de domaine.

Les fichiers créés sont:

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