Múltiples conexiones SSL en una sola solicitud web HTTPS

4

Configuré Apache2 con SSL y traté de solicitar la página web predeterminada de Apache2 ("¡Funciona!") usando https: // [IP_ADDRESS].

La herramienta de desarrollo Chrome muestra que solo se establece una conexión HTTP, sin embargo, a partir de los paquetes capturados de Wireshark, hay tres flujos TCP separados.

Los dos primeros flujos TCP terminan la rutina SSL, sin embargo, sin ningún tipo de datos de aplicación intercambiados. El último flujo de TCP ha intercambiado datos de la aplicación. Y lo que es más curioso, esas conexiones TCP se establecen simultáneamente, no una por una.

La pregunta es: ¿por qué se necesitan tres conexiones SSL separadas aquí?

    
pregunta PC Yin 13.05.2013 - 14:52
fuente

3 respuestas

2

Cuando se conecta a un sitio web HTTPS que utiliza un "certificado problemático" (por ejemplo, uno que no es emitido por una CA reconocida, un certificado caducado o un certificado que no contiene el nombre del servidor tal como aparece en la URL) ), el navegador solicita confirmación del usuario. Esto puede suceder solo después de que se haya recuperado el certificado del servidor, como parte de un protocolo de enlace SSL. Esto representa al menos una conexión inicial con el protocolo de enlace.

Mantener una conexión SSL abierta utiliza algunos recursos en el servidor; por lo tanto, los servidores cierran automáticamente las conexiones luego de cierta inactividad, y los navegadores intentan no mantener las conexiones abiertas por mucho tiempo. Mostrar la advertencia sobre el certificado no válido implica esperar a que el usuario humano tome una decisión (hacer clic o no, esa es la pregunta). Esto tomará algún tiempo; los humanos son lentos . Por lo tanto, el navegador primero cerrará su conexión SSL inicial, la que usó para obtener el certificado del servidor, pero aún no se ha producido HTTP, solo el protocolo de enlace SSL. Cuando el usuario humano finalmente decide conectarse a pesar de la advertencia de miedo, el navegador abrirá una nueva conexión, con un nuevo protocolo de enlace SSL, y en ese habrá algunos HTTP (como "datos de la aplicación").

En cuanto a la otra conexión (la "conexión inicial" es en realidad dos conexiones hechas en paralelo): Chrome abre conexiones especulativas para acelerar las solicitudes posteriores; en general, una página web incluye imágenes que deberán descargarse rápidamente. Chrome parece ser demasiado entusiasta a veces . El escenario plausible es entonces:

  1. Chrome abre dos conexiones con protocolo de enlace SSL.
  2. Chrome advierte que el certificado es inestable y requiere intervención humana. Cierra las dos conexiones sin hacer ningún HTTP dentro de los túneles SSL.
  3. Cuando el usuario decide abrir la página, Chrome abre una tercera conexión, realiza un protocolo de enlace SSL y esta vez sigue con el cuadro de diálogo HTTP.
respondido por el Thomas Pornin 14.05.2013 - 13:40
fuente
1

El primero está tomando el certificado, el segundo está haciendo un apretón de manos seguro, y el último es obtener los datos reales.

    
respondido por el Eric Zhang 13.05.2013 - 17:06
fuente
0

Se sabe que la configuración de "Predecir acciones de red para mejorar el rendimiento de carga de la página" en Chrome crea conexiones adicionales (inicialmente inactivas) al servidor como se informa aquí:

enlace

    
respondido por el wj. 17.01.2014 - 06:49
fuente

Lea otras preguntas en las etiquetas