2009-02-05 19 views
35

Estoy intentando configurar nuestros servidores para permitir el tráfico a través de SSL. Soy consciente de que SSL no funciona con Name Virtual Host, pero tenemos todos nuestros servidores apache en máquinas virtuales con IP privadas dedicadas. Tenemos una máquina virtual primaria que tiene la configuración mod_proxy para enrutar el tráfico al vms apropiado.Apache Name Host virtual con SSL

Sin embargo, para enrutar el tráfico https necesitamos tener el certificado instalado tanto en el proxy como en el vms. Tenemos un certificado de comodín que se puede usar en todos nuestros hosts. Todo parece funcionar correctamente, pero recibo lo siguiente en los registros de Apache para el proxy:

[warn] Init: servidor SSL conflicto de IP/puerto: host1.domain.com:443 (/ etc/apache2/sites- enabled/host1: 1) vs. host2.domain.com:443 (/ etc/apache2/sites-enabled/host2: 1)

Hay uno de estos mensajes de error para cada host que hemos configurado en el proxy. Nuestra configuración de host virtual para el proxy se publica a continuación:

<VirtualHost ipaddress:443> 
    ServerName host1.domain.com 
    ProxyPreserveHost On 
    ProxyRequests Off 
    ProxyPass/https://privateip:443/ 
    ProxyPassReverse/https://privateip:443/ 

    SSLProxyEngine on 
    SSLEngine on 
    SSLCertificateFile /etc/ssl/certs/server.crt 
    SSLCertificateKeyFile /etc/ssl/private/server.key 
</VirtualHost> 

¿Hay alguna manera de que puedo conseguir que esto funcione?

+0

Asegúrese de que se genera un certificado con el buen 'name' común o se ponga a funcionar en algunos navegadores y no en IE –

Respuesta

21

Parece que Apache le advierte que tiene múltiples secciones <VirtualHost> con la misma dirección IP y puerto ... en cuanto a que funcione sin advertencias, creo que debería usar algo como Server Name Indication (SNI), una forma de identificar el nombre de host solicitado como parte del protocolo de enlace SSL. Básicamente, te permite hacer hosting virtual basado en nombres a través de SSL, pero no estoy seguro de qué tan bien sea compatible con los navegadores. Aparte de algo como SNI, básicamente está limitado a un nombre de dominio habilitado para SSL para cada dirección IP que expone a Internet pública.

Por supuesto, si puede acceder correctamente a los sitios web, probablemente ignore las advertencias. Estos seres particulares no son muy graves - que son principalmente una indicación de lo que mirar si está experimentando problemas

+0

David, Gracias por su respuesta. Después de investigar un poco, creo que este sería el camino a seguir. Sin embargo, hay soporte limitado para SNI en Windows XP. Creo que intentaré esto de todos modos ya que estoy usando un certificado de comodín. Si esto no funciona, supongo que tendré que ignorar los errores por el momento. – JamesArmes

+0

PD: La mayoría de los sitios parecen referirse a esto como Indicación de nombre de servidor, no Identificación. – JamesArmes

+0

Ah, mi mal ... realmente me acordé del acrónimo, SNI. Editaré la publicación. –

3

Es posible que pueda reemplazar el:

VirtualHost ipaddress:443 

con

VirtualHost *:443 

Probablemente necesite hacer esto en todos sus hosts virt.

Probablemente aclare ese mensaje. Deje que la directiva ServerName se preocupe por enrutar la solicitud de mensaje.

Nuevamente, no podrá hacer esto si tiene múltiples alias de IP en la misma máquina.

+0

Harold, Gracias por su respuesta. Intenté esto antes y no importó. – JamesArmes

1

Apache no es compatible con SSL en host virtual basado en nombre, solo en hosts virtuales basados ​​en IP.

Fuente: Apache 2.2 SSL FAQ pregunta Why is it not possible to use Name-Based Virtual Hosting to identify different SSL virtual hosts?

diferencia de SSL, TLS permite la especificación de hosts basados ​​en nombres (SNI como se mencionó por otra persona), pero Apache aún no soporta esta característica. Supuestamente lo hará en una versión futura cuando se compile contra openssl 0.9.8.

Además, mod_gnutls afirma que admite SNI, pero en realidad nunca lo he probado.

+2

Parece que esta respuesta está un poco obsoleta –

+0

Tiene toda la razón El SSL basado en el nombre no funcionará. Buen enlace. –

1

Lo primero que necesita NameVirtualHost ip: 443 en que el archivo de configuración! Es probable que tenga uno con 80 al final, pero también necesitará una con 443.

En segundo lugar se necesita un certificado * .dominio (comodín) (es posible hacer uno)

En tercer lugar se puede hacer sólo telas something.domain en una ip (debido al certificado)

+0

uno de los números de tu puerto está equivocado, y no puedo arreglarlo 6 min min edit. –

0

el VirtualHost se vería así:

NameVirtualHost IP_Address:443 

<VirtualHost IP_Address:443> 
    SSLEngine on 
    SSLCertificateFile /etc/pki/tls/certs/ca.crt # Where "ca" is the name of the Certificate 
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key 
    ServerAdmin [email protected]_name.com 
    DocumentRoot /var/www/html 
    ServerName www.domain_name.com 
    ErrorLog logs/www.domain_name.com-error_log 
    CustomLog logs/www.domain_name.com-access_log common 
</VirtualHost> 
Cuestiones relacionadas