Dans ce tuto, nous allons voir comment installer 2 certificats SSL différents pour deux virtualhosts différents, sur un serveur debian / apache2 ne disposant que d’une IP.
Pour faire simple, nous envisageons ici le cas de certificats autosignés.
Le principe est le même pour les certificats issus d’une autorité de certification.
Déjà, activons le module ssl :
a2enmod ssl
On crée un repertoire pour stocker les certificats :
mkdir /etc/ssl/exempleA
cd /etc/ssl/exempleB
On génére la clé (sans passphrase pour ne pas avoir à la retaper au redémarrage automatique d’apache) :
openssl genrsa -out www.exampleA.com.key 2048
On génère le CSR
openssl req -new -key www.exampleA.com.key -out www.exampleA.com.csr
On génère le certificat
openssl x509 -req -days 365 -in www.exampleA.com.csr -signkey www.exampleA.com.key -out www.exampleA.com.crt
On règle les droits au minimum sur ces fichiers
chmod 600 *
éditer ainsi le VirtualHost du site exempleA
<VirtualHost *:443>
DocumentRoot /home/exampleA/www
ServerName www.exampleA.com
SSLEngine on
SSLCertificateFile /etc/ssl/exampleA/www.exampleA.com.crt
SSLCertificateKeyFile /etc/ssl/exampleA/www.exampleA.com.key
SSLVerifyClient None
SSLOptions +StdEnvVars
</VirtualHost>
Note : on peut aller beaucoup plus en détail dans la configuration du Vhost sécurisé, je ne mets ici que les lignes les plus basiques.
On fait la même chose pour le second Vhost :
mkdir /etc/ssl/exempleB
cd /etc/ssl/exempleB
openssl genrsa -out exempleB.key 2048
openssl req -new -key exempleB.key -out exempleB.csr
openssl x509 -req -days 365 -in exempleB.csr -signkey exempleB.key -out exempleB.crt
<VirtualHost *:443>
DocumentRoot /home/exampleB/www
ServerName www.exampleB.com
SSLEngine on
SSLCertificateFile /etc/ssl/exampleB/www.exampleB.com.crt
SSLCertificateKeyFile /etc/ssl/exampleB/www.exampleB.com.key
SSLVerifyClient None
SSLOptions +StdEnvVars
</VirtualHost>
Alors ajoutez dans /etc/apache2/ports.conf
<IfModule mod_ssl.c>
Listen 443
NameVirtualHost *:443
</IfModule>
Si vous obtenez le message d’erreur suivant au redémarrage d’apache :
« [warn] _default_ VirtualHost overlap on port 443, the first has precedence »
C’est que vous avez fait une erreur dans /etc/apache2/ports.conf ou dans un des vhosts.
Si vous obtenez le message d’erreur suivant au redémarrage d’apache :
« Restarting web server: apache2 … waiting (98)Address already in use: make_sock: could not bind to address [::]:443 »
C’est que vous avez activé gnutls. (ce qui active donc 2 fois le Listen 443 dans ports.conf)
Donc désactivez gnutls :
a2dismod gnutls
Méfiez-vous car la commande ‘apache2ctl -t’ ne signalera pas d’erreur.
Si tout est ok, lorsque vous visitez https://www.exampleA.com et https://www.exampleB.com vous obtenez bien 2 certificats différents
(Dans notre cas, en raison des certificats autosignés, vous devrez ajouter deux exceptions de sécurité dans votre navigateur)