Introduction
Aujourd’hui, nous allons nous intéresser à une manière de configurer une connexion en HTTPS seulement pour un serveur web Apache reposant sur un proxy Cloudflare. Si l’article se penche de façon précise sur le cas d’Apache et de Cloudflare, l’idée de fond reste applicable à d’autres scénarios et outils.
Pourquoi configurer HTTPS de bout-en-bout ?
Pour une raison majeure : la sécurité ! Le protocole HTTPS permet d’échanger des données de façon sécurisée grâce à l’usage de certificats TLS/SSL . Il devient ainsi impossible pour un hôte malveillant qui intercepte les communications de les déchiffrer.
En utilisant les services de Cloudflare, le schéma d’une requête web est généralement le suivant :

On remarque déjà qu’une première couche de sécurité est appliquée dans la mesure où le visiteur du site web ne connait pas le serveur source. Cela permet de limiter les attaques comme le DoS (déni de service). En effet, l’infrastructure de Cloudflare est robuste et maintes fois éprouvée, ce qui assure une protection fiable au serveur hôte.
Une mesure de sécurité supplémentaire est de chiffrer les échanges entre le client et le proxy, ainsi qu’entre le proxy et le serveur web. Aujourd’hui, il est devenu obligatoire pour un service digne de ce nom d’utiliser le protocole HTTPS, autant pour la sécurité réelle que cela apporte, que pour la confiance que les utilisateurs — même peu avertis — placent en ce petit logo de cadenas dans la barre de recherche.
Configurer SSL du client à Cloudflare
Cloudflare propose plusieurs niveaux de sécurité SSL :
- Strict (SSL-Only Origin Pull) : Force le chiffrement de la connexion entre Cloudflare et l’origine (le serveur hôte). Cela garantit que le trafic sera chiffré, sans prendre en compte si le visiteur le demandait ou non.
- Full (strict) : Active le chiffrement de bout-en-bout et assure la validation des certificats du serveur hôte. Il est nécessaire d’utiliser les certificats de Cloudflare “Origin CA” comme certificats d’origines (sur le serveur hôte).
- Full : Active le chiffrement de bout-en-bout. Ce mode est à utiliser quand le serveur supporte les certificats SSL mais n’a pas de certificat signé par une autorité reconnue.
- Flexible : Active le chiffrement, mais uniquement entre le visiteur du site et Cloudflare. Les communications entre Cloudflare et le serveur d’origine reposent sur HTTP.
- Off (not secure) : Aucun chiffrement n’est appliqué. Cela peut causer des avertissements sur les navigateurs
Il est recommandé d’activer au grand minimum l’option “Flexible” car elle assure au moins des communications sécurisées entre le client et Cloudflare. Cet article va quant à lui se pencher sur la configurer du mode Full (strict).
Il faut aussi activer une règle de redirection “HTTP to HTTPS” qui convertira automatiquement les requêtes vers HTTP à HTTPS. Cette configuration s’active depuis le tableau de bord de Cloudflare dans la section Rules puis Overview, sous le nom de Redirect from HTTP to HTTPS.
Configurer SSL de Cloudflare à Apache
Création du certificat
Le mode de sécurité Full (strict) nécessite d’utiliser le certificat Origin CA de Cloudflare. Ce certificat peut être généré dans la section SSL/TLS, sous Origin Server puis via le bouton Create Certificate.
Note : Il est important de bien télécharger la clé privée et le certificat, car la clé privée ne sera plus jamais disponible ultérieurement.
Ces certificats seront placés sur le serveur web, dans le répertoire /etc/cloudflare
:
user@web-server:/etc/cloudflare$ tree .
.
├── example.com.key
└── example.com.pem
1 directory, 2 files
Configuration SSL d’Apache
Du côté d’Apache, voici la configuration minimum requise pour mettre en œuvre le protocole HTTPS (fichier de
configuration /etc/apache2/sites-available/<votre-site>.conf
):
<VirtualHost *:443>
ServerName www.example.com
SSLEngine On
SSLCertificateFile /etc/cloudflare/example.com.pem
SSLCertificateKeyFile /etc/cloudflare/example.com.key
</VirtualHost>
La configuration contient les éléments suivants :
<VirtualHost *:443>
: Création d’un hôte virtuel sur le port443
, le port du protocole HTTPS.SSLCertificate<File/KeyFile>
: Le chemin vers les fichiers de clé privée et de certificat.
Attention : Pour pouvoir utiliser SSL avec Apache, il est nécessaire d’activer le module associé :
a2enmod ssl
La configuration précédente est minimale, il est recommandé d’ajouter les lignes de configuration suivantes pour une sécurité renforcée :
SSLProtocol TLSv1.2 TLSv1.3
SSLHonorCipherOrder on
SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:!aNULL:!MD5
SSLCompression off
Ces lignes permettent de n’utiliser que les protocoles TLS les plus récents (TLSv1.2 et 1.3), mais également de spécifier une préférence pour les algorithmes de chiffrement à privilégier (d’abord RC4-SHA, puis AES128-SHA…). La compression SSL est désactivée afin de se prémunir des attaques CRIME.
Une fois les configurations modifiées dans Apache, un redémarrage est nécessaire (systemctl restart apache2
sur les
systèmes Debian) pour appliquer le nouveau paramétrage.
Redirection HTTP vers HTTPS
Pour finir, on peut ajouter une redirection des requêtes en direction du port 80 vers le port 443 :
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
Bien que je trouve cette précaution bienvenue à titre personnel, cette configuration est théoriquement inutile dans la mesure où Cloudflare transforme déjà les requêtes HTTP entrantes en requêtes HTTPS grâce à la règle configurée plus tôt.
Conclusion
Cet article est revenu sur la sécurisation de bout-en-bout d’un serveur web Apache utilisant un proxy Cloudflare. Tous les échanges sont désormais chiffrés et il n’est plus possible d’accéder aux ressources du serveur web en utilisant le protocole HTTP.