Atlantilde Blog d'Alexandre Anriot

31août/10Off

Server Name Indication

Si vous souhaitez déployer plusieurs Virtualhosts SSL sur un même serveur, plusieurs questions se posent régulièrement, et voici un rapide tour d'horizon sur la question :

  • Avec Apache 2, vous avez la possibilité de configurer plusieurs Virtualhosts SSL partageant un certificat SSL commun, issu par exemple d'une autorité de certification comme CAcert, en utilisant la directive :

NameVirtualHost *:443

  • Si vous disposez de plusieurs IPv4, vous pouvez dans ce cas spécifier un certificat SSL distinct pour chaque Virtualhosts SSL, tout se passera en principe pour le mieux ;
  • Si ce n'est pas le cas, un problème se pose. En effet, lorsque la connexion SSL est établit entre le client (par exemple, un navigateur web) et le serveur, il vous faut forcément sélectionner un certificat au niveau du serveur, mais le nom d'hôte demandé n'est présent que dans des paquets SSL, et vous n'avez donc pas (encore) accès à cette information, qui ne devient exploitable qu'après la finalisation du handshake SSL.

Une solution existe cependant, et se nomme SNI (pour Server Name Indication). L'idée est d'ajouter le hostname demandé dans le premier paquet envoyé pour le handshake SSL. Ainsi, il n'est pas nécessaire d'attendre l'établissement de la connexion pour savoir vers quel Virtualhost la requête doit être envoyée.

Pour plus de précisions, vous pouvez consulter NameBasedSSLVHostsWithSNI.

En terme de prérequis, il est nécessaire d'avoir :

  • côté serveur, une version d'OpenSSL supérieure à 0.9.8f, ainsi qu'une version d'Apache 2 récente (pour les utilisateurs de Debian, la version d'Apache 2 dans Lenny, 2.2.9, ne supporte pas SNI, et il est nécessaire de se tourner par exemple vers la version de Squeeze) ;
  • côté client, un navigateur récent. Aucun problème si les postes client disposent d'un navigateur Firefox 3.x par exemple. Le log d'Apache l'indique d'ailleurs bien :

[...] [warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)

Il est à noter que d'autres serveurs web, comme nginx, supportent également la fonctionnalité SNI :

$ sudo nginx -V
nginx version: nginx/0.7.67
TLS SNI support enabled
[SNIP]

Quelques lectures annexes :

17août/10Off

IPv6 : The time has come

L’événement V6 WORLD CONGRESS 2011 aura lieu à Paris en février 2011. Les principaux opérateurs seront présents, ainsi que des organisations comme Renater, le G6, etc. Au programme, pénurie des ressources IPv4, intérêts d'IPv6, impact pour les opérateurs, études de cas, tutoriaux techniques, etc. L'affiche est prometteuse.