我有一个aspx页面正在检查Request.IsSecureConnection以确保它是真的,如果没有它重定向到https://www.domain.com/page.aspx的安全页面。
服务器为域安装了SSL证书,浏览器显示挂锁图标。
相同的代码在不同的服务器上运行良好,但现在Request.IsSecureConnection总是返回false。
我创建了一个完全空的aspx文件,它只打印Request.IsSecureConnection的返回值,但仍然是false,因此没有其他内容来自标准的http请求。
有人可能会建议可能导致这种情况的原因,或者提供一些关于我如何找出导致此错误总是返回false的提示吗?
答案 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。