RSS

Utiliser plusieurs certificats SSL sur un seul serveur apache

15 Déc

Bonjour à toutes et à tous !

De nombreux utilisateurs de serveurs web ont déjà été confrontés au drame : ne pas pouvoir mettre plus d’un certificat SSL sur une même adresse IP. La solution à ce fâcheux problème porte un nom : SNI (Server Name Indication).

Origine du problème

Le problème vient de l’implémentation du protocole SSL. Lors d’une requête l’adresse hôte est dans le paquet de la couche Transport, elle est donc illisible lors du chiffrement, par conséquent le serveur web n’a aucun moyen de savoir quel site est demandé et par extension quel certificat doit être utilisé pour déchiffrer la requête.

Solution

La version 3 du protocole SSL ainsi que le protocole TLS intègrent un nouveau champ d’en-tête permettant de préciser quel hôte on veut. Ainsi, Apache peut choisir un certificat SSL selon l’adresse demandée.

Inconvénients

Cette solution possède 2 inconvénients : côté serveur on doit recompiler apache/mod_ssl pour la prise en charge de SNI, côté client le navigateur internet doit également prendre en charge SNI sous peine de ne jamais recevoir le bon certificat SSL.

Le premier point reste moindre, le deuxième point tend à disparaitre bien que j’ai remarqué divers défaillances SNI sur Firefox 3.0.

Mise en place

Pour tous les systèmes gérant les dépendances, il suffit d’ajouter la dépendance SNI à Apache (exemple, ajoutez sni à USE sur Gentoo). Il se peut que votre version de mod_ssl / OpenSSL ne gère pas le SNI, dans ce cas utilisez mod_gnutls / GnuTLS. Pour les systèmes à gestionnaire de paquets pour assistés (style Debian, Ubuntu), le SNI devrait être intégré d’office mais pas sûr.

Pour tous ceux qui voudraient utiliser plusieurs certificats SSL sur une seule ip voici la solution :

Le module GnuTLS pour Apache2. Il va remplacer le module SSL installé par défaut dans Apache2.

Voici un petit tutoriel pour l’installation de ce module sur Debian Squeeze :

Tout d’abord, il faut installer le module (rien de plus simple , merci Debian et apt) :

apt-get install libapache2-mod-gnutls

On désactive le module SSL , et on active GnuTLS :

a2dismod ssl
a2enmod gnutls
/etc/init.d/apache2 restart

Et la dernière étape, configurer les certificats SSL pour chacun des virtualhost

<VirtualHost *:443>
ServerName monsite.domain.tld

GnuTLSEnable on
GnuTLSCertificateFile /etc/ssl/certs/monsite.domain.tld.crt
GnuTLSKeyFile /etc/ssl/certs/monsite.domain.tld.key
GnuTLSPriorities Normal

...
</VirtualHost>

Cette opération est évidemment à répéter pour chacun de vos VirtualHost.

Un petit redémarrage d’Apache:

/etc/init.d/apache2 restart

Et nous voici avec nos différents VirtualHost , et un certificat par Vhost, utilisant tous la même ip

On active GnuTLS avec GnuTLSEnable, on indique la clé avec GnuTLSKeyFile et le certificat délivré par votre autorité de certification avec GnuTLSCertificate.

La directive GnuTLSPriorities  permet d’indiquer la priorité d’algorithmes a utiliser lors de la négociation de la connexion. « Normal » permet à GnuTLS d’utiliser les algotithmes standard AES, 3DES, ARCFOUR et CAMELLIA…

 

Des certificats SSL (de préférences valide c’est gratos chez startSSL)

Pour plus d’informations, Dirigez-vous vers la documentation de GnuTLS.

 

Publicités
 
Poster un commentaire

Publié par le décembre 15, 2012 dans Admin Linux, Sécurite réseaux

 

Étiquettes : , , , , , ,

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

w

Connexion à %s

 
%d blogueurs aiment cette page :