Installer un certificat SSL sur Apache

Avec Apache 2.4.8 ou plus récent, un seul fichier contenant le certificat et la chaîne suffit : SSLCertificateChainFile n'est plus nécessaire. TLS 1.3 demande Apache 2.4.36 et OpenSSL 1.1.1 au minimum.

1. Placer les fichiers

Copiez le certificat, les intermédiaires et la clé dans un répertoire réservé à root, par exemple /etc/apache2/ssl, puis créez le fichier de chaîne complète (certificat en premier, intermédiaires ensuite) :

cd /etc/apache2/ssl
cat www.exemple.fr.crt intermediaires.crt > fullchain.pem
chown root:root fullchain.pem www.exemple.fr.key
chmod 644 fullchain.pem
chmod 600 www.exemple.fr.key

2. Activer mod_ssl

Sous Debian et Ubuntu :

a2enmod ssl

Sous la famille Red Hat, installez le paquet mod_ssl. Apache doit aussi écouter sur le port 443 (Listen 443, déjà présent dans la configuration SSL par défaut).

3. Configurer le VirtualHost

Sur Debian et Ubuntu, placez ce bloc dans /etc/apache2/sites-available/exemple.fr-ssl.conf ; sous la famille Red Hat, dans /etc/httpd/conf.d/exemple.fr-ssl.conf.

<VirtualHost *:443>
    ServerName www.exemple.fr
    DocumentRoot /var/www/exemple.fr

    SSLEngine on
    SSLCertificateFile    /etc/apache2/ssl/fullchain.pem
    SSLCertificateKeyFile /etc/apache2/ssl/www.exemple.fr.key
    SSLProtocol -all +TLSv1.2 +TLSv1.3

    ErrorLog  ${APACHE_LOG_DIR}/exemple.fr-ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/exemple.fr-ssl-access.log combined
</VirtualHost>

${APACHE_LOG_DIR} est la variable de Debian et d’Ubuntu ; sur d’autres systèmes, indiquez le chemin complet du répertoire de journaux. SSLCertificateFile reçoit ici le certificat suivi de la chaîne. Avant Apache 2.4.42, un SSLProtocol placé dans un VirtualHost qui n’est pas le premier du couple adresse/port est ignoré : réglez-le plutôt pour tout le serveur (sous Debian et Ubuntu, dans mods-available/ssl.conf). Si vous utilisez une version antérieure à 2.4.8, mettez le seul certificat dans SSLCertificateFile et la chaîne dans SSLCertificateChainFile.

4. Activer, tester et recharger

Sous Debian et Ubuntu, activez le site, puis testez et rechargez :

a2ensite exemple.fr-ssl
apache2ctl configtest
systemctl reload apache2

Sous la famille Red Hat, le fichier de conf.d est chargé directement : les commandes sont apachectl configtest et systemctl reload httpd. Vérifiez ensuite le résultat avec la commande openssl s_client donnée dans la page d’installation.

Rediriger HTTP vers HTTPS

Dans le VirtualHost du port 80 :

<VirtualHost *:80>
    ServerName www.exemple.fr
    Redirect permanent / https://www.exemple.fr/
</VirtualHost>