【问题标题】:In HTTPS request , Request.IsSecureConnection return false在 HTTPS 请求中,Request.IsSecureConnection 返回 false
【发布时间】:2012-09-25 09:44:49
【问题描述】:

我有一个在 https (SSL) 中工作的 asp.net 应用程序。这在我的本地计算机和 Amazon AWS(生产环境)中运行良好。

但是当我在办公室托管这个应用程序(用于测试)时,会发生一些奇怪的事情。

  1. 我可以在浏览器中看到 https 和锁定标志。

  2. Fiddler 还显示输出已加密并显示端口 443。

  3. 但是HttpContext.Current.Request.IsSecureConnection 返回false

  4. HttpContext.Current.Request.Url.Scheme 返回http

在办公室,我们使用 Juniper SSG 防火墙和 TMG 2010(Forefront Threat Management Gateway 2010)。因此服务器通过 Juniper 和 TMG 2010 接收请求。提前致谢。

【问题讨论】:

    标签: c# asp.net ssl https


    【解决方案1】:

    为了降低成本,我怀疑 SSL 证书安装在 TMG 网关上,并且此网关在将请求传递给实际 Web 服务器时只是将请求重写为标准 HTTP。因此,当请求到达 IIS 和您的 Web 应用程序时,它就是一个标准的纯 HTTP 请求。

    【讨论】:

    • 在 TMG 中安装 SSL 证书
    • 好的,这解释了行为。 TMG 在将请求传递给 Web 服务器之前正在重写请求。
    • @JomyJohn 如果 SSL 在 TMG 终止,那么 ASP.NET 是正确的:到达 ASP.NET 的请求不是 https
    • @Darin Dimitrov 谢谢,你能提出一些解决方案吗?
    • 配置您的 Web 服务器和管理 SSL 证书对于 StackOverflow 来说是题外话。如果您对此有一些具体问题,我邀请您前往 SF:serverfault.com/questions/68753/… 一种可能的方法是拥有一个专门的反向代理 SSL 农场。
    【解决方案2】:

    在部署到 Amazon 的 Elastic Beanstalk 环境后,这让我大吃一惊。我看不到任何方法可以让负载平衡器允许 SSL 请求直接通过服务器。相反,它总是在负载均衡器处终止 SSL,并将纯 http 传回服务器。

    我找到了这个文档:Elastic Load Balancing Concepts - X-Forwarded Headers

    本质上,负载均衡器会在将请求转发到后端服务器之前将一些额外的HTTP Headers 注入到每个请求中。最相关的是X-Forwarded-Proto,它跟踪用于从客户端浏览器连接到负载平衡器的协议。可以这样检查:

    var loadbalancerReceivedSSLRequest = string.Equals(Request.Headers["X-Forwarded-Proto"], "https");
    var serverReceivedSSLRequest = Request.IsSecureConnection;
    
    if (loadbalancerReceivedSSLRequest || serverReceivedSSLRequest)
    {
        // SSL in use.
    }
    else
    {
        // SSL not in use.
    }
    

    【讨论】:

    【解决方案3】:

    另外一种检查方法是检查端口

    if(context.Request.Url.Port == 443)
    

    注意:检查哪个端口用于安全连接,通常是443

    【讨论】:

    • 这不起作用,因为 Web 服务器仍将请求视为端口 80。
    • @Aki 你可能是对的,但在“Jomy”的描述中提到他在提琴手上看到了 443 端口 ....
    • 我认为这是因为 Fiddler 会显示客户端和负载均衡器之间的加密请求(端口 443)。但是负载均衡器和 Web 服务器之间的请求将显示端口 80,这就是 ASP.NET 看到的。
    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 2014-02-12
    • 2021-11-19
    • 2021-05-30
    • 2019-02-15
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    相关资源
    最近更新 更多