Tous les guides de déploiement Déploiement

Comment installer un certificat SSL sur Apache

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ée
    • chain.pemchaî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 utiliser fullchain.pem dans SSLCertificateFile et ignorer SSLCertificateChainFile. 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 :

DirectiveFonction
SSLEngine onActive SSL/TLS pour ce VirtualHost
SSLCertificateFileChemin vers votre certificat
SSLCertificateKeyFileChemin vers votre clé privée
SSLCertificateChainFileChemin vers le certificat CA intermédiaire
SSLProtocolUniquement TLS 1.2/1.3 — anciennes versions obsolètes
SSLHonorCipherOrder offLaisse le client choisir la meilleure suite de chiffrement
SSLCompression offEmpêche l’attaque CRIME
SSLUseStaplingLe serveur pré-récupère la réponse OCSP
Strict-Transport-SecurityHSTS — les navigateurs retiennent de toujours utiliser HTTPS
Redirect permanentRedirection 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

ApacheNginx
CertificatSSLCertificateFile cert.pemssl_certificate fullchain.pem
Clé privéeSSLCertificateKeyFile privkey.pemssl_certificate_key privkey.pem
ChaîneSSLCertificateChainFile chain.pemIncluse dans fullchain.pem
Fichiers nécessaires3 fichiers séparés2 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
  • SSLCertificateChainFile mal 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

Articles connexes

Premiers pas 2026-05-08
Comment obtenir un certificat SSL gratuit (guide étape par étape)
Obtenez un certificat SSL gratuit de Let's Encrypt en 5 minutes — aucun logiciel à installer, aucun compte à créer. Guide complet couvrant 4 méthodes, les deux types de challenge, l'installation sur 6 plateformes et le dépannage.
Déploiement 2026-05-07
Comment rediriger HTTP vers HTTPS
Forcer tout le trafic vers HTTPS avec des redirections côté serveur. Exemples de configuration pour Nginx, Apache et .htaccess avec des redirections permanentes 301.
Déploiement 2026-05-08
Comment installer un certificat SSL sur Nginx
Guide étape par étape pour installer un certificat SSL sur Nginx. Couvre l'upload des fichiers, la configuration complète du bloc serveur, les bonnes pratiques TLS, HTTP/2, HSTS, la configuration des redirections, les tests et le dépannage de 6 erreurs courantes.
Déploiement 2026-05-07
Comment corriger les avertissements de contenu mixte
Le contenu mixte se produit quand une page HTTPS charge des ressources via HTTP. Apprenez à trouver et corriger les erreurs de contenu mixte pour obtenir un cadenas propre.
Obtenez un certificat SSL gratuit dans votre navigateur
Aucune installation, aucun compte. Votre clé privée ne quitte jamais votre appareil.
Obtenir un certificat