[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Re: [Ayuda] SSL en dominios virtuales



Eduardo Sacristan wrote:

> No es asi, no tiene nada que ver con los certificados ni con los virtual
> hosts que declaras en la configuracion del apache.

No estoy de acuerdo.
Tiene que ver con la configuración del Apache cuando declaras el host virtual que van
con ssl habilitado porque ahí le dices dónde se encuentra la llave que va a cargar al
arancar y dónde se encuentra el certificado que va a mandar durante la negociación de
ssl cuando llegue a ese host virtual.

> El SSL tiene que hacer un "handshake" para establecer la conexion segura
> antes de intercambiar cualquier tipo informacion con el protocolo HTTP,
> Para hacer esta conexion inicial se utiliza el protocolo SSL y no
> el HTTP (este, HTTPS, corre sobre el SSL) y requiere la IP del servidor.

Todos los handshakes de todos los protocolos que usan TCP/IP requieren la IP dle
servidor ¿no?

> El virtual host que declaras en tu configuracion del Apache ya es
> utilizado cuando "entra" en funciones el HTTP por lo que el SSL no puede
> saber antes que existe este virtualhost.

Cuando arranca el APACHE revisa que no haya dos hosts virtuales habilitados con SSL (o
uno con SSL y el otro sin SSL) escuchando al mismo tiempo en la misma dirección IP y
en el mismo puerto. Si se encuentra una combinación así  se niega a arrancar. Una vez
que arranca carga en memoria todas las llaves privadas de todos los hosts virtuales
habilitados con SSL, te pide las contraseñas de las llaves que se encuentra
encriptadas.

>
> Pa' no echar mas rollo, del FAQ del manual del modssl:
>  (http://www.modssl.org/docs/2.8/ssl_faq.html#ToC47)
>
> Why can't I use SSL with name-based/non-IP-based virtual hosts?    [L]

Pero no dice que no se pueda usar SSL en hosts virtuales basados en IP o hosts
virtuales basados en puerto.
Y aunque te excluya de usar hosts virtuales basados en nombre no te prohibe usar
varios ServerAlias en la definición del host virtual y manejar la virtualización de
hosts dentro de tu motor de aplicaciones.

> The reason is very technical. Actually it's some sort of a chicken and egg
> problem: The SSL protocol layer stays below the HTTP protocol layer and
> encapsulates HTTP. When an SSL connection (HTTPS) is established
> Apache/mod_ssl has to negotiate the SSL protocol parameters with the
> client. For this mod_ssl has to consult the configuration of the virtual
> server (for instance it has to look for the cipher suite, the server
> certificate, etc.).

En este momento es donde tu cliente verifica el commonName (CN) del certifiacdo que te
manda el servidor contra el nombre del host que estás pidiendo en la URL.
El servidor sólamente puede mandar un certificado por cada combinación de host y
puerto mientras que el DNS te puede resolver un número indefinido de hosts que apunten
hacia la misma IP y si tu host virtual escucha en el puerto 443 (el default) no
necesitas poner el puerto en la URL.
De ahí que si dos o más hosts te resuelven la misma IP y pudes en la URL cada uno de
esos hosts, sólamente el que concuerde con el CN del certificado te va a dejar pasar
sin que tu cliente proteste. De ahí que Gunnar tiene razón cuando dice ' Sí, vas a
poder usar los
    > hosts virtuales, pero tu navegador se quejará de que el certificado no
    > corresponde y hará pensar al usuario en posibles ataques de
    > personificación de terceros.';

> But in order to dispatch to the correct virtual server
> Apache has to know the Host HTTP header field.

Eso no lo conoce hasta después de que terminó la negociación de SSL y ya puede
comenzar a pasar el http dentro del SSL.

> For this the HTTP request
> header has to be read. This cannot be done before the SSL handshake is
> finished. But the information is already needed at the SSL handshake
> phase. Bingo!

La información que se necesita para el handshake del SSL no la puede tomar del host
virtual, entonces la toma del par IP/puerto que concuerde de la lista de los que ya
tiene cargados desde que arrancó.

>
> Y por lo mismo, no tiene que ver con el certificado, este tambien lo pones
> en la configuracion del apache y no se lee hasta despues que el SSL ha
> establecido la conexion

Si no recuerdo mal, el certificado se tiene que mandar en la negociación anes de
establecer la conexión porque dentro del certificado entre otras cosas se encuentra la
llave pública del host virtual sin la cual no se puede establecer ninguna conexión
segura entre dos enrte que desconfían el uno del otro. Es por eso que cuando instalas
los certificados tienes que crear una liga cuyo nombre sea el hash del certificado
porque lo único con lo que el Apache cuenta al momento del handshake es la llave
privada que tiene cargada en al memoria  y a partir de ésta tiene que buscar el
certificado que tiene que mandarle al cliente.

> y el HTTP puede "ver" al virtual host.

Bueno, como todo esto es muy confuso se me ocurrió hacer una demostración de lo que
decía Gunnar sobre la queja del cliente que recibe un certificado malo con la
siguiente tercia de hosts virtuales que apuntan hacia la misma IP y te redirigen hacia
la misma IP en el mismo puerto:
http://bueno.prueba.sip.gob.mx/
http://malo.prueba.sip.gob.mx/
http://www.prueba.sip.gob.mx/ <-- es muy acostumbrado poner un ServerAlias con la
versión www del sitio y lo que sucede no es bueno.

Para usar correctamente la demostración necesitan cargar el certificado del sitio
http://ac.sip.gob.mx/server.bueno.prueba.sip.gob.mx.RSA.crt que tiene las siguientes
huellas digitales:
MD5 Fingerprint=5F:F6:78:E2:69:EF:F1:C1:B6:FF:3B:63:28:5E:A6:D5
SHA Fingerprint=5E:80:51:75:A1:6B:96:9A:7C:12:B8:F8:6A:67:24:1B:BD:D1:2A:4A
SHA1 Fingerprint=0B:D8:62:95:D5:67:B2:17:A2:1E:6B:1B:33:90:11:CD:5F:11:E0:E5

O cargar el certificado de mi CA http://ac.sip.gob.mx/ca.RSA.crt que tiene las
siguientes huellas digitales:

SHA1 Fingerprint=BE:B2:7F:17:BC:39:86:1C:DE:D1:37:E9:73:C0:0B:48:FD:8B:C3:26
SHA Fingerprint=53:7B:9F:73:1E:CE:86:4B:88:D5:ED:88:A1:73:D3:50:B1:E5:7E:23
MD5 Fingerprint=CA:D0:38:7B:C8:3A:D6:AC:4D:3F:B8:65:1A:58:1A:C8


--
Sandino Araico Sánchez
The safest web site in the world is worthless
if most TCP implementations cannot transfer data from it.
RFC2923



_______________________________________________
Ayuda mailing list
Ayuda en linux org mx
Para salir de la lista: http://mail.linux.org.mx/mailman/listinfo/ayuda/



[Hilos de Discusión] [Fecha] [Tema] [Autor]