SSL avec Apache (https)
Ce petit tutoriel va vous permettre d'activer la fonction SSL dans Apache afin de pouvoir accéder au site par défaut ou à un vhost via https.
Tout d'abord il faut activer le module ssl dans Apache :
sudo a2enmod ssl
Configuration par défaut (site par défaut)
Cette partie peut être appliquée si vous hébergez qu'un seul site et que vous utilisez la configuration par défaut d'Apache.
On génère le certificat par défaut, cela prend le hostname de la machine :
sudo make-ssl-cert generate-default-snakeoil --force-overwrite
Il suffit ensuite d'activer la configuration par défaut d'Apache pour le SSL :
sudo a2ensite default-ssl
Relancer Apache
sudo /etc/init.d/apache2 restart
Vous devriez pouvoir accéder à votre site en https.
Configuration par vhost
Dans les exemples suivants le nom du certificat sera mySite.pem, remplacez le nom par le nom du site ou son domaine.
Génération du certificat
Pour générer le certificat, il y a deux méthodes possible :
Méthode rapide
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/certs/mySite.pem
Saisir le domaine ou l'url du site concerné.
Méthode personnalisée
Avec cette méthode les données saisies reflèteront mieux les données réelles du vhost :
sudo openssl req -x509 -nodes -days 365 -new -keyout /etc/ssl/certs/mySite.pem -out /etc/ssl/certs/mySite.pem
Répondez ensuite aux questions qui vous seront posées :
Generating a 1024 bit RSA private key ...++++++ ....++++++ writing new private key to '/etc/ssl/certs/mySite.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []: Email Address []:
Configuration du vhost
Il suffit ensuite de déclarer le certificat dans le vhost souhaité :
<VirtualHost *:443> ... SSLEngine on SSLCertificateFile /etc/ssl/certs/mySite.pem </VirtualHost>
Pour finir, relancer Apache :
sudo /etc/init.d/apache2 restart
Forcer l'utilisation de SSL par vhost
Dans certains cas on veux forcer l'utilisation de l'https en fonction du vhost appelé (pour un webmail par exemple). Pour cela on peut utiliser le mod_rewrite d'Apache directement dans la déclaration du vhost :
<VirtualHost *:80> ... RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost>