Pasar la información del protocolo SSL al backend a través del encabezado HTTP

13

Después de que se revelara la vulnerabilidad de Poodle recientemente, nuestro equipo decidió pasar de SSLv3. Pero antes de la eliminación completa, quieren advertir a los usuarios diarios que su navegador usa SSLv3 en desuso. Entonces, se nos ocurrió la idea de

  • Detecta el protocolo (SSLv3, TLS1, etc.) desde la descarga SSL de front-end (usamos nginx)
  • Pase esa información (protocolo SSL) a través del encabezado HTTP a Apache-backend.

Luego, nuestro código de fondo procesará ese encabezado y dará una advertencia si el cliente usa SSLv3 .

Sé que nginx tiene función proxy_set_header. Entonces este sería tan simple como

proxy_set_header X-HTTPS-Protocol $something;

Ahora, el problema es: obviamente, nginx conoce el protocolo utilizado por el cliente, pero ¿cómo puedo pasar esa información al backend a través del encabezado HTTP?

Gracias


Como señaló un hilo similar, Apache redirige al usuario si está utilizando SSLv3 , esta idea puede convertirse en una muy, muy mala idea.

La razón es que el protocolo de enlace TLS ocurre antes de que el tráfico HTTP se envíe a través del túnel TLS. Para cuando nuestro backend detecte el protocolo SSL, el cliente puede haber enviado datos privados en su primera solicitud. Para una solución permanente ya largo plazo, debemos considerar deshabilitar SSLv3.

tpml7
fuente

Respuestas:

14

Nginx usa muchas variables que se pueden usar en la configuración. Esta página proporciona la lista completa de las variables. La variable que contiene el protocolo en una solicitud HTTPS es ssl_protocol. Citación:

$ssl_protocol

devuelve el protocolo de una conexión SSL establecida;

Entonces su proxy_set_headerconfiguración sería

proxy_set_header X-HTTPS-Protocol $ssl_protocol;

Otra referencia: aquí

masegaloeh
fuente
Falta un punto y coma al final de $ ssl_protocol (no puedo cambiarlo ya que serverf * l requiere que se cambien 6 caracteres).
danger89
@ danger89 hecho de que
sanmai