Activer https sur apache 2 avec SSL

Introduction

L'utilisation du protocole https en lieu et place du http permet d'augmenter le niveau de sécurité de votre site en garantissant le chiffrement des connexions. Ce chiffrement empêche la lecture des données en cas d'interception. Activer https c'est offrir une sécurité supplémentaire à vos utilisateurs mais aussi améliorer son référencement dans les résultats de recherche. En effet depuis quelques temps Google favorise les sites accessibles en https par rapport à ceux qui ne le sont pas.

Nous verrons dans ce tutorial comment générer un fichier csr, obtenir un certificat et configurer apache pour activer le https.

Pré-requis

Nous assumons qu'apache 2 est déjà installé sur votre serveur. En revanche ce tutorial nécessite l'installation d'OpenSSL:

apt-get update
apt-get install openssl 

Génerer une CSR

Le CSR est un fichier généré sur votre serveur qui contient l'ensemble de vos informations relatives au certificat (société, email, etc.) ainsi que votre clé publique.

Pour générer ce fichier en sha2 utilisez la commande:

openssl req -nodes -newkey rsa:2048 -sha256 -keyout private.key -out server.csr

Suite à ça, plusieurs informations vous sont demandées:

Generating a 2048 bit RSA private key
...........+++
.....................................................................+++
writing new private key to 'monserveur.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Strasbourg
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Votre_société
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:subdomain.example.com
Email Address []:admin@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Remplissez les champs avec vos informations. Le champ optional company name n'est pas requis. En revanche il est recommandé de renseigner une adresse e-mail puisqu'elle pourra être utilisée lors de l'envoi du certificat par le tiers délivrant. Il est aussi recommandé d'utiliser un "challenge password" même si ce n'est pas obligatoire.

Deux fichiers ont été générées, private.key qui contient votre clé privé, et server.csr qui contient vos informations et votre clé publique. c'est de ce dernier dont nous aurons besoin pour obtenir un certificat. Il faut donc visualiser ce fichier pour en copier le contenu:

cat serveur.csr

Et copier intégralité du contenu:

-----BEGIN CERTIFICATE REQUEST-----
.......... contenu encrypté ..............
-----END CERTIFICATE REQUEST-----

Il faut maintenant coller ce contenu sur le site sur lequel vous avez achetez votre certificat. Ce dernier devrait ensuite vous faire parvenir le certificat par email. Deux chaines ou fichiers vous sont retournés, Copiez ces dernièrs sur votre serveur. Dans le cadre de ce tutorial nous les avons nommés public.crt et intermediate.crt.

Sachez qu'il est possible d'obtenir un certificat gratuit pour usage personnel sur startssl.com, sinon vous trouverez des certificats basiques à partir de $10 environ.

Configurer apache 2 avec mod_ssl

Activer le mod ssl

Pour utiliser le protocole https avec apache il faut au préalable activer le mod ssl:

a2enmod ssl

Configurer le VirtualHost

Nous allons maintenant créer un virtual host spécifique pour le protocole https. Ce dernier pourra fonctionner en parallèle du VirtualHost sur le port 80, vous pouvez même insérer les 2 vhost dans le même fichier.

On édite ou crée un nouveau fichier pour le VirtualHost:

nano /etc/apache2/sites-available/monsite

Puis on y ajoute les lignes suivantes en prenant soin de modifier le domaine et les différents chemins par ceux de votre serveur ( www.example.com et /chemin/vers/ ...)

<VirtualHost *:443>
        DocumentRoot "/var/www/example.com/"
        ServerName www.example.com
        ServerAdmin admin@example.com
        AddDefaultCharset utf-8
        Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

        <Directory "/var/www/example.com">
                Options -FollowSymLinks
                Options Indexes
                #AllowOverride None
                Order allow,deny
                allow from all
         </Directory>

               SSLEngine on
               SSLProtocol ALL -SSLv2 -SSLv3
               SSLHonorCipherOrder On
               SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
              SSLCompression Off
              SSLCertificateFile /chemin/vers/public.crt
              SSLCertificateKeyFile /chemin/vers/private.key
              SSLCertificateChainFile /chemin/vers/intermediate.crt
</VirtualHost>

Si c'est un nouveau VirtualHost on active le site:

a2ensite mon_site

Puis on relance apache:

service apache2 reload

Vous pouvez maintenant profiter du protocole https sur votre site !

Bonus: redirection de http vers https

Si vous souhaitez rendre votre site accessible uniquement en https il faut rediriger la version http vers la version https. Pour cela il faut modifier votre VirtualHost http de la manière suivante:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost >

Vous avez une question ou une suggestion ? N'hésitez pas à réagir dans les commentaires !