2008-11-09 13 views
8

Tengo un servidor web, que sirve diferentes nombres de dominio, pero solo tiene una dirección IP asignada. Eso funciona bien con los servidores virtuales en Apache. Ahora quiero conexiones con encriptación SSL para los sitios web. ¿Cómo puedo establecer diferentes certificados SSL para los diferentes vhosts?¿Cómo puedo configurar diferentes certificados SSL para vhosts en Apache?

Usar una IP diferente para los diferentes nombres de host sería una solución, no muy elegante pero posible. Pero quiero saber cómo puedo usar diferentes certificados SSL para diferentes fantasmas. Entonces busco una solución con solo una dirección IP.

Respuesta

8

ACTUALIZACIÓN: 2013

Parece que finalmente está comenzando SNI se apoderan como navegadores antiguos están cayendo de distancia. Aquí está el docs for Apache SNI y aquí hay un wikipedia article on SNI que incluye un gráfico en los navegadores que lo soportan. En resumen, todos los principales navegadores lo admiten en versiones compatibles; si es importante admitir navegadores antiguos, es posible que deba tenerlo en cuenta.

------ ------------ respuesta anterior

hosts SSL debe estar ligada a una combinación dirección/puerto IP exclusiva y, por lo tanto no se puede utilizar el alojamiento virtual (O al menos, solo puede tener un host ssl por dirección IP). Esto se debe al hecho de que https comienza el cifrado antes de que el parámetro Host: se envíe en http y, por lo tanto, no puede determinar qué cifrado usar desde el nombre de host; todo lo que tiene es la dirección IP.

Esto sería tontamente fácil de arreglar si HTTP tuviera un comando TLS para que pudiera iniciar SSL después de preguntar por el nombre de host, pero nadie me preguntó.

Para la respuesta definitiva, ver http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

+2

En realidad, ahora hay RFC 2817, que permite actualizar TLS en una conexión HTTP. Está implementado en Apache. –

+0

¿Pero los navegadores lo admiten todavía? – DGM

2

yo sepa que no es posible establecer diferentes certificados SSL para los hosts virtuales basados ​​en nombres utilizando mod_ssl. Puede leer la razón detallada here. Una alternativa sería usar hosts virtuales basados ​​en IP (lo cual probablemente no sea posible/no sea una solución muy satisfactoria) - solo inserte diferentes directivas SSLCertificateFile, o podría probar el método this usando mod_gnutls.

+0

Guau, ese RFC para SNI se inició en 2003 y todavía no se ha puesto de moda? Estoy intrigado por la afirmación de que los navegadores ya lo soportan. – DGM

1

Necesitará una combinación separada de IP: puerto para cada host virtual.

RFC 3546 no es posible aún. IE solo lo admite cuando se ejecuta en Vista, y la última vez que revisé, Safari tampoco lo gestiona.

+0

Sí, los navegadores que admiten esta función están restringidos, pero es una posible solución. Una pena, que no existe una solución 'correcta'. RFC 3546 parece la mejor esperanza para una buena solución. Por el momento, debe solicitar más direcciones IP o restringir los navegadores. – Mnementh

+0

Sí, o la fea solución temporal de ejecutar en un puerto diferente. RFC3546 sucederá, pero ese día todavía está desafortunadamente muy lejos. – bobince

1

Si bien todo el DGM mencionado es cierto, ha habido algunos intentos de evitar el requisito de una dirección IP única para cada certificado, incluidos mod_gnutls y usando TLS extensions. Hay algunos inconvenientes, pero pueden ser aceptables para usted.

1

¡Finalmente es posible! Es necesario el servidor y el cliente para apoyar Servidor de Nombres Indicación (SNI)

navegadores, que apoyan SNI:

  • Mozilla Firefox 2.0 o posterior
  • Opera 8.0 o posterior (con TLS 1.1 habilitado)
  • Internet Explorer 7.0 o posterior (en Vista, XP no)
  • Google Chrome
  • Safari 3.2.1 en Mac OS X 10.5.6

Este documento muestra la azada para configurar su servidor: SSL with Virtual Hosts Using SNI

Cuestiones relacionadas