Configurer une connexion SSL (Secure Sockets Layer), vous permet d'ajouter un protocole de cryptage asymétrique supplémentaire au HTTP commun. Le protocole SSL peut être utile pour renforcer soit le système d'authentification d'un site Web, soit l'échange de données entre une application et le serveur. Dans ce guide, vous verrez comment configurer une connexion SSL et activer HTTPS sur Apache avec Ubuntu 18.04.
Tout d'abord, connectez-vous à votre serveur via une connexion SSH. Si vous ne l'avez pas encore fait, il est recommandé de suivre notre guide pour vous connecter en toute sécurité avec le protocole SSH. Dans le cas d'un serveur local, passez à l'étape suivante et ouvrez le terminal de votre serveur.
Obtenir un certificat SSL
Pour établir une connexion sécurisée, Apache aura besoin d'un certificat SSL qui peut être obtenu auprès d'une autorité de certification (CA). Pour plus de commodité, dans cet exemple, nous utiliserons un certificat auto-signé ou auto-signé, utilisé uniquement dans les environnements de test et de développement. Pour obtenir un certificat auto-signé, consultez notre guide Créer un certificat SSL auto-signé.
Si vous souhaitez obtenir un certificat SSL gratuit émis par une autorité de certification, suivez notre guide sur Comment sécuriser Apache avec Let's Encrypt et Ubuntu 18.04.
Remarque importante :
Lors de la création du certificat, saisissez l'adresse IP et/ou le nom de domaine de votre serveur lorsqu'on vous demande le nom commun :
Common Name (e.g. server FQDN or YOUR name) []: domain.com
Après avoir obtenu le certificat, créez le dossier /etc/certificate :
$ sudo mkdir /etc/certificate
Ensuite, enregistrez-y le certificat et la clé privée.
Configuration des paramètres Apache SSL
Poursuivez en définissant les directives pour la connexion sécurisée qu'Apache va créer. Pour cela, créez le fichier ssl-params.conf dans le répertoire Apache conf-available :
$ sudo nano /etc/apache2/conf-available/ssl-params.conf
Collez la configuration de base suivante dans le fichier nouvellement créé :
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
Ensuite, enregistrez et fermez le fichier.
Comment changer l'hôte virtuel
Ensuite, modifiez la configuration SSL du Virtual Host du domaine que vous souhaitez protéger avec une connexion SSL. Dans ce didacticiel, la configuration SSL de l'hôte virtuel Apache par défaut sera utilisée, à titre d'exemple.
Ouvrez la configuration SSL de l'hôte virtuel :
$ sudo nano /etc/apache2/sites-available/default-ssl.conf
Vous trouverez un fichier structuré comme suit :
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Configurez correctement la directive ServerAdmin en saisissant votre email et ajoutez la directive ServerName suivie de votre domaine ou de l'adresse IP de votre serveur.
Enfin, modifiez le chemin indiqué par les directives SSLCertificateFile et SSLCertificateKeyFile, en saisissant respectivement le chemin de votre certificat et de votre clé privée .
Vous obtiendrez un résultat semblable au suivant :
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName mydomain.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/certificate/certificate.crt
SSLCertificateKeyFile /etc/certificate/private.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Ensuite, enregistrez et fermez le fichier.
Comment configurer le pare-feu
En cas de pare-feu sur votre système, configurez-le pour autoriser le trafic HTTP et le trafic HTTPS sur votre machine.
Lorsque vous utilisez le pare-feu UFW, certains profils préinstallés pour Apache sont disponibles. Voyons donc comment les activer.
Pour vérifier les profils disponibles installés dans le pare-feu UFW, exécutez cette commande :
$ sudo ufw app list
Une liste semblable à la suivante s'affichera à l'écran :
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Pour autoriser le trafic HTTP (Port 80) et HTTPS (Port 443), utilisez le profil "Apache Full".
Vérifiez les informations de profil comme suit :
$ sudo ufw app info "Apache Full"
La description du profil d'écran s'affichera :
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.
Ports:
80,443/tcp
Après avoir vérifié le profil, activez-le :
$ sudo ufw allow in "Apache Full"
Comment configurer Apache
À ce stade, des modifications peuvent être apportées à la configuration d'Apache.
Activez les modules mod_ssl et mod_headers :
$ sudo a2enmod ssl
$ sudo a2enmod headers
Activer la lecture de la configuration SSL créée précédemment :
$ sudo a2enconf ssl-params
Activer l'hôte virtuel SSL par défaut :
$ sudo a2ensite default-ssl
Vérifiez que vous n'avez pas fait d'erreurs de syntaxe dans les fichiers de configuration d'Apache :
$ sudo apache2ctl configtest
Si le message "Syntaxe OK" apparaît à l'écran, procédez au redémarrage d'Apache :
$ sudo systemctl restart apache2
Comment vérifier la connexion sécurisée
Ouvrez votre navigateur en vous connectant au domaine ou à l'adresse IP du Virtual Host que vous avez configuré, en veillant à utiliser le protocole https
https://mydomain.com