Virtual hosts basados en nombres y multiples certificados SSL
Hace como cuatro varios años me encontré con el problema de que no era posible configurar en apache virtual hosts basados en nombre que tuvieran diferentes certificados SSL. El problema es que en el nombre del dominio que se utiliza para resolver viene encriptado dentro del request ssl y para desencriptarlo primero se deben intercambiar las llaves.
Una alternativa que encontré en ese momento (utilizar las solución de raíz al problema en ese momento, era todo un problema) es usar un certificado wildcard (*.dominio.fqdn). Esta práctica no siempre es posible usarla siempre (no todos los CA están dispuesto a firmar certificados con comodines, y por otro lado puede quererse hostear dominos donde un wildcard no es posible *.dominio1.fqdn y *.dominio2.fqdn).
Hoy en día cacert.org tienen un excelente compendio de como atacar el problema. Un mejor nombre para este problema es el de Server Name Indication (o SNI). El problema se soluciona con unas extensiones a TLS definidas en el RFC 4366 (publicado en Abril del 2006). Estas extensiones parecen que son soportadas por la mayoría de los navegadores grandes (salvo por safari).
OpenSSL agrega soporte para las la extensiones de TLS desde la versión 0.9.8f (que data del 11 de Octubre 2007). (gentoo por ejemplo usa la version 9.8d como estable, kubuntu usa la la 0.9.8c [esperemos que con los parches adecuados :)]). En gentoo desde el ebuild openssl-0.9.8g se soporta SNI (esto es porque hay que habilitar una opción de en el ./configure).
Una vez que OpenSSL soporta SNI, falta que mod_ssl del apache lo soporte. Existe un issue en el tracker de apache con este problema. El issue incluye un parche que fue comiteado a trunk/ hace 7 semanas (el 21 de diciembre del 2007). Hoy mismo (14 de febrero 2008) ocurrieron unos commits relacionados con SNI.
Parece que se quiere backportear la funcionalidad hacia la proxima versión (2.2.9). En el archivo STATUS del branch aparece:
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
....
* mod_ssl: Add server name indication (RFC 4366) support (PR 34607).
Trunk version of patches:
http://svn.apache.org/viewvc?view=rev&revision=606190
http://svn.apache.org/viewvc?view=rev&revision=607420
http://svn.apache.org/viewvc?view=rev&revision=607425
http://svn.apache.org/viewvc?view=rev&revision=611216
Backport version for 2.2.x of updated patch:
http://people.apache.org/~fuankg/diffs/httpd-2.2.x-sni.diff
+1: fuankg
+0: like ssl upgrade of 2.2, perhaps this is a good reason to bring
httpd-2.4 to completion? vhost changes could be disruptive to
third party module authors.
-1: rpluem: jorton found some problems with the trunk version and they
should be fixed / discussed in trunk before we backport.
---------------8<---------------8<------------------------
En gentoo, el ebuild apache-2.2.6-r6 viene con soporte de SNI (en un USE FLAG sni), y parece que funciona. Tiempos interesantes para SNI!