【问题标题】:Why does Request.IsSecureConnection return false when true is expected为什么 Request.IsSecureConnection 在预期为 true 时返回 false
【发布时间】:2010-11-03 03:50:33
【问题描述】:

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

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

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

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

任何人都可以提出可能导致此问题的原因,或提供任何提示我如何找出导致此问题始终返回错误的原因?

【问题讨论】:

    标签: asp.net ssl https


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 或者让负载均衡器来确保从客户端到您的网站的连接是安全的。
      • 他应该能够通过在该测试页面上输出 Request.UserHostAddress 和/或 Request.UserHostName 来确认这种怀疑。如果这些值不是他正在连接的客户端(或客户端正在通过的代理),那么它们很可能会识别出某种负载均衡器或位于他的 Web 服务器前面的反向代理。
      • Request.UserHostAddress 和 Request.UserHostName 都返回我的 IP 地址。
      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 2015-10-03
      • 2011-05-22
      • 2017-07-29
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      相关资源
      最近更新 更多