为什么Request.IsSecureConnection在预期为true时返回false

时间:2009-06-15 21:06:35

标签: asp.net ssl https

我有一个aspx页面正在检查Request.IsSecureConnection以确保它是真的,如果没有它重定向到https://www.domain.com/page.aspx的安全页面。

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

相同的代码在不同的服务器上运行良好,但现在Request.IsSecureConnection总是返回false。

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

有人可能会建议可能导致这种情况的原因,或者提供一些关于我如何找出导致此错误总是返回false的提示吗?

2 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:1)

某些负载均衡器会向请求添加新标头,您可以使用该标头来确定来自客户端的原始请求是否来自SSL。使用Azure网站,以下代码似乎有效:

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

其他一些负载均衡器可能会使用另一个标头,例如X-Forwarded-Proto。