2009-06-15 65 views
20

我有一个aspx页面正在检查Request.IsSecureConnection以确保它是真实的,如果没有,它会重定向到安全页面https://www.domain.com/page.aspx为什么Request.IsSecureConnection在预期值为true时返回false

服务器为域安装了SSL证书,浏览器显示挂锁图标。

相同的代码在其他服务器上运行正常,但现在Request.IsSecureConnection始终返回false。

我创建了一个完全空的aspx文件,它只是打印Request.IsSecureConnection的返回值,它仍然是假的,所以没有其他内容来自标准http请求。

任何人都可以提出什么可能会导致这种情况,或者提供任何提示,我可能会发现什么导致这总是返回false?

回答

28

如果您的网络服务器前面有一个负载平衡路由器或类似的终端,那么从那里到您的网络服务器的连接将不会通过SSL。在这种情况下,您通常必须检查特定端口上的连接或由负载平衡器设置的标头。

+3

或者让他负载平衡器,以确保从客户端到您的网站的连接是安全的。 – 2009-06-15 21:22:52

+0

他应该能够通过在该测试页上输出Request.UserHostAddress和/或Request.UserHostName来确认此怀疑。如果这些值不是他所连接的客户端(或客户端正在经历的代理),那么他们很可能会识别位于其Web服务器前的某种负载平衡器或反向代理。 – 2009-06-15 21:25:53

1

某些负载均衡器向请求添加了一个新的标头,您可以使用该标头来确定来自客户端的原始请求是否通过了SSL。随着Azure的网站下面的代码似乎工作:

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

一些其他的负载平衡器可以使用另一头,例如X-转发 - 协议。

相关问题