Installer un certificat SSL sur Apache 2 (Debian & Ubuntu)

Préambule

Avant tout, sachez que si le certificat SSL a été acheté chez nous, nous pouvons gratuitement prendre en charge l'installation du certificat SSL sur Apache 2.
L'installation s'effectue avec vous via par téléphone ainsi qu'avec une prise de contrôle à distance de votre PC afin que vous puissiez apprendre à activer le SSL sur Apache 2.

Ce tutoriel permet d'installer un certificat SSL sur Apache 2 (mod_ssl) sur un serveur Debian ou Ubuntu (Linux). Sur d'autres distributions, certaines commandes peuvent varier.


Pré-requis :

Activation des modules d'Apache

Vous devez préalablement activer le module SSL Apache et éventuellement le module Headers (optionnel : Il permet d'activer le HSTS) :

# Activer le module SSL Apache
a2enmod ssl

# Activer le module Headers
a2enmod headers

# Redémarrer le service pour prendre en compte l'activation des modules
service apache2 restart 


Sauvegarde du certificat SSL et de sa clé privée sur le serveur

Nous vous conseillons de créer un répertoire dans "/etc/ssl" et d'y placer l'ensemble des certificats ".cer" ainsi que votre clée privée ".key".


1. S'assurer qu'Apache écoute le port 443 (protocole https) :

Commençons par vérifier si Apache écoute le port 443 (port utilisé par le protocole https). Exécutez la commande ci-dessous, qui doit vous retourner un résultat :

netstat -tanpu | grep "LISTEN" | grep "443" 

En l'absence de résultat, le serveur Web n'écoute pas le port 443. La directive "Listen 443" ne doit pas être présente dans la configuration. Vérifions :

grep -R "Listen" /etc/apache2 


Si aucun résultat n'est retourné par cette commande, vous devez éditer la configuration d'Apache (/etc/apache2/ports.conf) afin d'ajouter :

<IfModule mod_ssl.c>
    Listen 443
</IfModule> 

Il ne vous reste plus qu'à redémarrer Apache pour que cette configuration soit prise en compte. Vérifiez à nouveau si le port 443 est écouté :

# Redémarrez Apache :
service apache2 restart

# Vérifiez qu'Apache écoute bien le port 443 (https) :
netstat -tanpu | grep "LISTEN" | grep "443" 

2. Trouver et copier le Virtual Host actuellement utilisé par Apache en HTTP :

Pour obtenir une configuration identique en HTTP ainsi qu'en HTTPS, nous vous conseillons de dupliquer la configuration déjà utilisée sur le protocole HTTP.

Si votre serveur héberge plusieurs sites web, il doit utiliser la directive ServerName. Vous allez donc pouvoir trouver le VirtualHost à dupliquer via la commande ci-dessous :

# Commencez par vous déplacer dans le répertoire "sites-available"
cd /etc/apache2/sites-available

# Recherchez la configuration d'Apache (généralement présente dans "sites-available")
grep -R "site-a-securiser.fr" /etc/apache2 

Si vous n'obtenez aucun résultat, la directive ServerName ne doit pas être utilisée. Vérifiez si un fichier de configuration est présent dans le répertoire "sites-available".
Si vous n'arrivez pas à trouver le VirtualHost, la configuration chargée par Apache est surement présente dans "/etc/apache2/apache2.conf".

Une fois le VirtualHost trouvé, dupliquez le pour conserver une base de configuration identique sur les deux protocoles (HTTP et HTTPS) ou éditez le "/etc/apache2/apache2.conf".

cp nom-du-vhost.conf nom-du-vhost-ssl.conf 

3. Configuration du VirtualHost Apache pour le protocole HTTPS (port 443) :

Remplacez le port 80 par le port 443 dans la configuration du Virtual Host : <VirtualHost *:443> puis ajoutez la configuration ci-dessous :

# Activation du SSL
SSLEngine On

# Activation de tous les protocoles sécurisés (TLS v1.0, TLS v1.1 et TLS v1.2) tout en désactivant les protocoles non sécurisés (SSL v2 et v3)
SSLProtocol All -SSLv3 -SSLv2

# On active les méthodes de chiffrement, et on désactive les méthodes de chiffrement non sécurisés (par la présente d'un !)
SSLCipherSuite HIGH:!aNULL:!MD5:!ADH:!RC4:!DH

# Le navigateur devra choisir une méthode de chiffrement en respectant l'ordre indiquée dans SSLCipherSuite
SSLHonorCipherOrder on

# Chemin vers le certificat SSL de votre nom de domaine
SSLCertificateFile "/etc/ssl/www-nom-domaine-fr/www-nom-domaine-fr.cer"

# Chemin vers la clée privée du certificat SSL de votre nom de domaine
SSLCertificateKeyFile "/etc/ssl/www-nom-domaine-fr/www-nom-domaine-fr.key"

# Chemin vers le certificat SSL racine, puis vers le certificat SSL intermédiaire. Attention : L'ordre est important.
SSLCACertificateFile "/etc/ssl/www-nom-domaine-fr/certificat-racine.cer"
SSLCACertificateFile "/etc/ssl/www-nom-domaine-fr/certificat-intermediaire.cer" 


Si toutes les pages de votre site doivent être sécurisées, ajoutez la directive ci-dessous, qui va activer le HSTS (HTTP Strict Transport Security).

Header always set Strict-Transport-Security "max-age=15768000" 

4. Activer la configuration Apache et tester le bon fonctionnement du SSL :

# Activer le VirtualHost présent dans "sites-available"
a2ensite nom-du-vhost-ssl

# Si toutefois vous devez désactiver ce VirtualHost, exécutez : a2dissite nom-du-vhost-ssl

# Redémarrer Apache pour la prise en compte de ce nouveau VirutalHost
service apache2 restart 

Nous recommandons vivement de tester votre configuration SSL sur "Qualys SSL Labs" afin de s'assurer que la sécurité SSL est optimale.

Vous devriez obtenir la note "A+" (si le Strict-Transport-Security est activé, voir l'étape n°3) et la note A sans le HSTS. A défaut, vérifiez votre configuration ou contactez-nous.


Obtenir A+ SSL Labs