Table des matières
Disposer de plusieurs virtualhosts SSL sur Apache2
Comme vous avez pu le constater si vous avez tenté la configuration de plusieurs virtualhosts sécurisés par SSL sous Apache2, Apache2 indique une erreur telle que :
[warn] vhost2 VirtualHost overlap on port 443, the first (vhost1) has precedence
Si vous ne disposez pas des avertissements, vous pourrez voir sur un navigateur une alerte de sécurité pour tout virtualhost SSL autre que celui par défaut, en effet, ce sera toujours le premier certificat SSL qui sera envoyé si vous utilisez mod_ssl (qui repose sur OpenSSL), la librairie par défaut.
Quelle en est la cause principale ?
Le support SNI, soit Server Name Indication, dans les librairies SSL. Cette option n'est pas activée par défaut dans OpenSSL.
Lorsqu'un client se connecte au serveur web en HTTPS, la connexion SSL est établie avant de connaitre le nom d'hôte cible, donc le certificat SSL qui est envoyé pour établir la connexion est toujours celui par défaut.
Dans OpenSSL, le support SNI a été intégré dans les versions supérieures à 0.9.8k, cependant, il n'est pas activé par défaut, il est nécessaire de recompiler OpenSSL pour en profiter.
Une autre librairie, GnuTLS, en dispose nativement, elle peut donc être utilisée directement pour créer des virtualhosts SSL sécurisés disposant chacun de leur propre certificat SSL.
Comment contourner cette problématique ?
En recompilant Apache2 et OpenSSL
La problématique ainsi que les prérequis pour utiliser OpenSSL avec SNI et Apache2 est expliquée sur le wiki d'Apache.org.
En utilisant la librairie GnuTLS
Si recompiler les deux programmes ne vous tente pas, vous pouvez abandonner mod_ssl au profit de mod_gnutls, installez d'abord le paquet :
apt-get install libapache2-mod-gnutls
Désactivez SSL et activez GnuTLS :
a2dismod ssl a2enmod gnutls
Enfin configurez les virtualhosts avec les certificats :
- retirez les informations relatives à mod_ssl, soit les deux lignes suivantes :
<IfModule mod_ssl.c> ... </IfModule>
- ajoutez les informations pour le certificat SSL :
<VirtualHost *:443> ServerName domain1.tld DocumentRoot /var/www/domain1 [...] GnuTLSEnable on GnuTLSExportCertificates on GnuTLSCacheTimeout 500 GnuTLSCertificateFile /etc/ssl/certs/domain1.crt #GnuTLSClientCAFile /etc/ssl/ca.gandi.net.cert GnuTLSKeyFile /etc/ssl/private/domain1.key #GnuTLSPriorities NONE:+AES-128-CBC:+ARCFOUR-128:+RSA:+SHA1:+MD5:+COMP-NULL:$ GnuTLSPriorities NORMAL # SSL Protocol Adjustments: BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force$ [...] </VirtualHost>
- Puis effectuez la même opération pour les autres virtualhosts
- Enfin redémarrez Apache2
Source : Multiple SSL certificates on a single IP/port using mod_GnuTLS