Ce guide vous accompagne dans l’installation d’un certificat SSL sur le serveur HTTP Apache avec mod_ssl — du téléchargement des fichiers aux paramètres TLS renforcés en passant par le dépannage des erreurs courantes. Fonctionne avec les certificats de GetHTTPS, Certbot ou toute autre CA.
Si vous n’avez pas encore de certificat, obtenez-en un gratuitement en 5 minutes.
Prérequis
- Apache 2.4+ installé et servant votre site en HTTP (port 80)
- Accès root/sudo au serveur
- Fichiers de certificat — Apache a besoin de trois fichiers séparés :
cert.pem— votre certificat (entité finale uniquement)privkey.pem— votre clé privéechain.pem— chaîne de certificats CA intermédiaire
Pourquoi trois fichiers ? Contrairement à Nginx (qui utilise un seul
fullchain.pem), Apache attend traditionnellement le certificat et la chaîne comme fichiers séparés. Apache 2.4.8+ peut utiliserfullchain.pemdansSSLCertificateFileet ignorerSSLCertificateChainFile. Détails des formats →
Étape 1 : Télécharger les fichiers de certificat
# Créer un répertoire sécurisé
sudo mkdir -p /etc/ssl/gethttps
# Copier les fichiers sur le serveur
sudo cp cert.pem chain.pem privkey.pem /etc/ssl/gethttps/
# Sécuriser la clé privée
sudo chmod 600 /etc/ssl/gethttps/privkey.pem
sudo chmod 644 /etc/ssl/gethttps/cert.pem /etc/ssl/gethttps/chain.pem
sudo chown root:root /etc/ssl/gethttps/*
En cas de transfert via SCP :
scp cert.pem chain.pem privkey.pem user@your-server:/tmp/
# Sur le serveur :
sudo mv /tmp/{cert,chain,privkey}.pem /etc/ssl/gethttps/
Étape 2 : Activer les modules Apache requis
# Debian/Ubuntu
sudo a2enmod ssl # Module SSL principal
sudo a2enmod headers # Pour HSTS et les en-têtes de sécurité
sudo a2enmod rewrite # Pour la redirection HTTP→HTTPS (si utilisation de .htaccess)
sudo systemctl restart apache2
# CentOS/RHEL/Amazon Linux
sudo yum install mod_ssl # Installe et active généralement en une seule étape
sudo systemctl restart httpd
Vérifier que mod_ssl est chargé :
apachectl -M | grep ssl
# Attendu : ssl_module (shared)
Étape 3 : Configurer le VirtualHost HTTPS
Créez ou modifiez la configuration SSL de votre site. Sur Debian/Ubuntu, c’est généralement /etc/apache2/sites-available/yourdomain-ssl.conf :
# ─── Serveur HTTPS ────────────────────────────
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
# Fichiers de certificat
SSLEngine on
SSLCertificateFile /etc/ssl/gethttps/cert.pem
SSLCertificateKeyFile /etc/ssl/gethttps/privkey.pem
SSLCertificateChainFile /etc/ssl/gethttps/chain.pem
# Protocole TLS — uniquement 1.2 et 1.3
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off
SSLCompression off
# OCSP stapling (vérification de certificat plus rapide pour les clients)
SSLUseStapling on
SSLStaplingCache "shmcb:/var/run/apache2/ssl_stapling(128000)"
# En-têtes de sécurité
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
# Votre site
DocumentRoot /var/www/html
<Directory /var/www/html>
AllowOverride All
</Directory>
</VirtualHost>
# ─── Redirection HTTP ───────────────────────────
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
Ce que fait chaque directive :
| Directive | Fonction |
|---|---|
SSLEngine on | Active SSL/TLS pour ce VirtualHost |
SSLCertificateFile | Chemin vers votre certificat |
SSLCertificateKeyFile | Chemin vers votre clé privée |
SSLCertificateChainFile | Chemin vers le certificat CA intermédiaire |
SSLProtocol | Uniquement TLS 1.2/1.3 — anciennes versions obsolètes |
SSLHonorCipherOrder off | Laisse le client choisir la meilleure suite de chiffrement |
SSLCompression off | Empêche l’attaque CRIME |
SSLUseStapling | Le serveur pré-récupère la réponse OCSP |
Strict-Transport-Security | HSTS — les navigateurs retiennent de toujours utiliser HTTPS |
Redirect permanent | Redirection 301 HTTP → HTTPS |
Étape 4 : Activer le site et tester
# Debian/Ubuntu
sudo a2ensite yourdomain-ssl.conf
sudo apachectl configtest # Doit afficher "Syntax OK"
sudo systemctl reload apache2
# CentOS/RHEL
sudo apachectl configtest
sudo systemctl reload httpd
Si configtest signale une erreur, il indique la ligne exacte — corrigez-la avant de recharger.
Étape 5 : Vérifier
Navigateur : Visitez https://yourdomain.com. Cliquez sur le cadenas → vérifiez “Let’s Encrypt” comme émetteur.
Ligne de commande :
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
En ligne : Utilisez le SSL Labs Server Test pour une évaluation complète. Objectif : A ou A+.
Apache vs Nginx : différences de fichiers de certificat
| Apache | Nginx | |
|---|---|---|
| Certificat | SSLCertificateFile cert.pem | ssl_certificate fullchain.pem |
| Clé privée | SSLCertificateKeyFile privkey.pem | ssl_certificate_key privkey.pem |
| Chaîne | SSLCertificateChainFile chain.pem | Incluse dans fullchain.pem |
| Fichiers nécessaires | 3 fichiers séparés | 2 fichiers (chaîne combinée) |
Apache 2.4.8+ peut aussi utiliser le fullchain.pem combiné dans SSLCertificateFile — vous pouvez alors omettre SSLCertificateChainFile.
Renouvellement
Lorsque votre certificat approche de son expiration (vérifier ici) :
# Remplacer les fichiers
sudo cp new-cert.pem /etc/ssl/gethttps/cert.pem
sudo cp new-chain.pem /etc/ssl/gethttps/chain.pem
sudo cp new-privkey.pem /etc/ssl/gethttps/privkey.pem
# Recharger (pas redémarrer) — aucun temps d'arrêt
sudo systemctl reload apache2 # Debian/Ubuntu
sudo systemctl reload httpd # CentOS/RHEL
Guide complet de renouvellement → | Automatiser avec Certbot →
Dépannage
”AH02572: Failed to configure certificate” / clé non concordante
Le certificat et la clé privée ne correspondent pas. Vérifiez la correspondance :
# Ces deux empreintes doivent être identiques
openssl x509 -noout -modulus -in /etc/ssl/gethttps/cert.pem | md5sum
openssl rsa -noout -modulus -in /etc/ssl/gethttps/privkey.pem | md5sum
Si elles diffèrent, vous utilisez des fichiers de sessions GetHTTPS différentes. Retéléchargez les deux depuis la même session.
”AH01909: server certificate does NOT include an ID”
Votre ServerName ne correspond à aucun domaine dans le champ SAN du certificat :
openssl x509 -noout -text -in /etc/ssl/gethttps/cert.pem | grep -A1 "Subject Alternative Name"
Assurez-vous que votre ServerName Apache correspond exactement à l’un des noms DNS listés.
Le navigateur affiche “certificat non approuvé”
La chaîne intermédiaire est manquante. Vérifiez que SSLCertificateChainFile pointe vers chain.pem (l’intermédiaire), et non vers cert.pem. Testez la chaîne :
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | grep "Verify return code"
# "Verify return code: 0 (ok)" = bon
# "Verify return code: 21 (unable to verify)" = chaîne incomplète
“AH00526: Syntax error on line X”
Erreur de syntaxe dans la configuration Apache. Causes courantes :
- Balise
</VirtualHost>fermante manquante SSLCertificateChainFilemal orthographié- Guillemets manquants autour des valeurs d’en-tête
- Le chemin du fichier n’existe pas
HTTPS fonctionne mais affiche “Non sécurisé”
Contenu mixte — votre page charge des ressources via HTTP. Ouvrez les DevTools → Console → corrigez les URL en http://.
Questions fréquemment posées
Puis-je utiliser fullchain.pem au lieu de fichiers certificat + chaîne séparés ?
Oui, à partir d’Apache 2.4.8+. Utilisez SSLCertificateFile /path/to/fullchain.pem et supprimez entièrement la directive SSLCertificateChainFile. Sur les versions plus anciennes d’Apache, vous avez besoin de fichiers séparés.
Comment vérifier quelle version d’Apache j’ai ?
apachectl -v
# ou
httpd -v
Dois-je redémarrer Apache ou simplement le recharger ?
Recharger (systemctl reload) suffit et n’entraîne aucun temps d’arrêt. Un redémarrage (systemctl restart) interrompt toutes les connexions actives. Utilisez toujours le rechargement pour les changements de certificat.
Apache peut-il servir différents certificats pour différents domaines ?
Oui. Créez des blocs <VirtualHost *:443> séparés avec différentes directives ServerName et SSLCertificate*. Apache utilise SNI (Server Name Indication) pour sélectionner le bon certificat.
Apache prend-il en charge les certificats ECDSA ?
Oui. Apache 2.4+ gère ECDSA de la même manière que RSA — mêmes directives, même format de fichier. GetHTTPS génère par défaut des certificats ECDSA P-256.
Où se trouvent les journaux d’erreurs SSL d’Apache ?
# Debian/Ubuntu
tail -f /var/log/apache2/error.log
# CentOS/RHEL
tail -f /var/log/httpd/ssl_error_log