2009-06-15 14 views
20

Tengo una página aspx que comprueba Request.IsSecureConnection para asegurarse de que es verdadera, si no lo hace redirige a la página segura en https://www.domain.com/page.aspx.¿Por qué Request.IsSecureConnection devuelve falso cuando se espera que sea verdadero

El servidor tiene un certificado SSL instalado para el dominio y el navegador muestra el ícono del candado.

El mismo código se ejecutó correctamente en un servidor diferente, pero ahora Request.IsSecureConnection siempre devuelve falso.

He creado un archivo aspx completamente vacío, que solo imprime el valor de retorno de Request.IsSecureConnection y sigue siendo falso, por lo que no hay otro contenido procedente de una solicitud http estándar.

¿Alguien podría sugerir qué podría estar causando esto, o dar algún indicio sobre cómo podría descubrir lo que está causando que esto siempre devuelva falso?

Respuesta

28

Si hay un enrutador de equilibrio de carga o similar en frente de su servidor web con terminación ssl, entonces la conexión desde allí a su servidor web no será a través de SSL. En este caso, generalmente debe verificar si hay una conexión en un puerto específico o si el equilibrador de carga está configurando los encabezados.

+3

O déjelo en el equilibrador de carga para garantizar que la conexión entre el cliente y el sitio web sea segura. –

+0

Debería poder confirmar esta sospecha enviando Request.UserHostAddress y/o Request.UserHostName en esa página de prueba. Si esos valores no son el cliente al que se está conectando (o un proxy que está atravesando el cliente), es probable que identifiquen algún tipo de equilibrador de carga o proxy inverso que se encuentre frente a su servidor web. –

+0

Request.UserHostAddress y Request.UserHostName devuelven mi dirección IP. – Will

1

Algunos equilibradores de carga agregan un nuevo encabezado a la solicitud que puede usar para determinar si la solicitud original del cliente se realizó a través de SSL. Con sitios web Azure el siguiente código parece funcionar:

if (string.IsNullOrEmpty(Request.Headers["x-arr-ssl"])) 
{ 
    // No SSL 
} 
else 
{ 
    // Secure connection 
} 

Algunos otros equilibradores de carga pueden utilizar otro encabezado, por ejemplo X-reenvía Proto.

+0

El nuestro usa "SSLSessionID" solo para otro punto de datos. –

Cuestiones relacionadas