Tutoriels

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

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

 

Sommaire

Préambule :

Tout d'abord, sachez que si vous achetez votre certificat SSL chez Wistee.fr, un administrateur système vous aidera gratuitement et sur simple demande, à installer le certificat SSL sur votre serveur... Il vous montrera par TeamViewer comment est-ce qu'il configure votre serveur "dans les règles de l'art" et vous donnera toutes les explications utiles pour partager ses connaissances avec vous... De plus, les tarifs de Wistee sont très interessants (jusqu'à -45% des tarifs Public) Profitez-en !
 

Pré-requis :

Vous devez préalablement avoir installé Apache 2 avec le module mod_ssl. Nous vous conseillons également d'activer le module headers (pour le HSTS).

Activer les modules nécessaires à l'utilisation du protocole SSL avec Apache :

Activer le module SSL :

a2enmod ssl

Activer le module headers (recommandé pour activer le HSTS, nous verrons de quoi il s'agit à la fin du tutoriel)

a2enmod headers

Redémarrer Apache :

service apache2 restart

 

Placer le certificat SSL ainsi que sa clé privée sur le serveur dans un répertoire dédié :

 

Création du répertoire qui contiendra le certificat SSL :

mkdir /etc/ssl/votre-domaine-fr/

Puis uploadez y votre certificat SSL, votre clé privée ainsi que le certificat intermédiaire et racine, en hormonisant les noms (pour éviter des erreurs) :

  • Votre certificat SSL : Renommez le en "www-votre-domaine-fr.cer" (vous pouvez modifier l'extension s'il est actuellement en ".crt")
  • Votre clé privée : Renommez la en "www-votre-domaine-fr.key"
  • Le certificat intermédiaire et racine : Conservez les noms (vous pouvez modifier l'extension en ".cer" s'ils sont actuellement en ".crt").

 


 

Etape n°1 : Vérifier qu'Apache écoute bien le port 443 (https) :

Pour cela, exécutez par SSH la commande ci-dessous, qui va vous indiquer quel processus écoute le port 443 (Apache, Nginx ...) :

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

Si cette commande ne vous retourne rien : Votre Apache ne doit probablement pas écouter le port 443, vérifions :

grep -R "Listen" /etc/apache2

En l'absence de "Listen 443", c'est qu'effectivement Apache n'écoute pas le port 443 / HTTPS. Editez le fichier qui contient le "Listen 80", et ajoutez cette configuration :

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

Redémarrer Apache

service apache2 restart

Puis vérifiez à nouveau qu'Apache écoute désormais le port 443 :

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

Si cette commande vous retourne un résultat : Vous pouvez poursuivre l'installation du certificat SSL sur Apache 2
En l'absence de résultat : Contactez votre revendeur de certificat SSL... Ou contactez-nous au 03 44 02 02 15

 


 

Etape n°2 : Trouver le VirtualHost de l'adresse déjà accessible en HTTP

Si l'adresse à sécuriser est déjà accessible via le protocole HTTP et que vous souhaitez la rendre accessible en HTTPS, il est recommandé de dupliquer son VirtualHost afin d'avoir une configuration d'Apache identique sur les deux protocoles ("http" et "https").

Se déplacer dans le dossier contenant les VirtualHost d'Apache :

cd /etc/apache2/sites-available

Lister les fichiers présents dans ce répertoire :

ls -la

Apache peut être configuré avec ou sans la directive ServerName, qui permet de faire fonctionner plusieurs noms d'hôte sur une même adresse IP / serveur.
Il vous faut trouver le fichier de configuration contenant le VirtualHost de l'adresse que vous souhaitez sécuriser (si elle est déjà accessible sur le protocole HTTP) :

Soit votre serveur utilise la directive ServerName, vous devriez pouvoir effectuer une recherche sur le nom de domaine de votre site :

grep -R "votre-adresse-deja-accessible-en-http.fr" /etc/apache2

Si vous n'obtenez pas de résultat, votre Apache n'utilise pas la directive ServerName. Vous devez trouver manuellement le fichier contenant le VirtualHost.

Une fois le fichier trouvé, nous allons le dupliquer pour conserver la base de configuration (généralement les fichiers se trouvent dans /etc/apache2/sites-available/ :

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

 


 

Etape n°3 : Configurer le VirtualHost pour le protocole HTTPS :

Commencez par remplacer le port associé à ce VirtualHost : <VirtualHost *:443> au lieu de <VirtualHost *:80>
Ajoutez les directives ci-dessous dans le VirtualHost, mais en dehors de toute section Directory.

# On active le SSL
SSLEngine On

# On active tous les protocoles (TLS v1.0, TLS v1.1 et TLS v1.2), mais on désactive SSL v2 et v3 (obsolètes et remplacés par TLS)
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

# On demande au navigateur de sélectionner une méthode de chiffrement en respectant l'ordre envoyée par le serveur (HIGH uniquement)
SSLHonorCipherOrder on

# On renseigne le chemin vers le certificat SSL de l'adresse à sécuriser
SSLCertificateFile "/etc/ssl/votre-domaine-fr/www-votre-domaine-fr.cer"

# On renseigne le chemin vers la clée privée correspondant au certificat SSL de l'adresse à sécuriser
SSLCertificateKeyFile "/etc/ssl/votre-domaine-fr/www-votre-domaine-fr.key"

# On renseigne le chemin vers le certificat SSL racine, puis vers le(s) certificat(s) SSL intermédiaire(s).
# Si vous disposez de plusieurs certificats intermédiaires, vous pouvez ajouter d'autres directives SSLCACertificateFile.
SSLCACertificateFile "/etc/ssl/votre-domaine-fr/certificat-racine.cer"
SSLCACertificateFile "/etc/ssl/votre-domaine-fr/certificat-intermediaire.cer"

Si vous souhaitez sécuriser l'ensemble de votre site en SSL, nous vous conseillons d'activer le HSTS par l'ajout de cette ligne :

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

Le HTTP Strict Transport Security (HSTS) permet d'indiquer au navigateur du client qu'il doit communiquer avec le serveur uniquement de manière sécurisée.
 

Enfin, activez le VirtualHost que vous venez de configurer puis rechargez la configuration d'Apache :

Activer le VirtualHost :

a2ensite nom-du-vhost-ssl
# Pour désactiver le vhost si vous avez commis une erreur de configuration :
# Executez : a2dissite nom-du-vhost-ssl

Recharger la configuration d'Apache :

service apache2 reload


N'oubliez pas de tester la configuration SSL de votre serveur sur "SSLLabs.com". Sans le HSTS, vous devriez obtenir la note "A", et avec le HSTS : "A+" :

1
Erreur SSLLabs : This server's certificate chain i...
01/10/2016 : Fin des certificats SSL pour les adre...