【问题标题】:IIS: How to simulate SSL termination on load balancerIIS:如何在负载均衡器上模拟 SSL 终止
【发布时间】:2015-08-10 14:25:05
【问题描述】:

情况:

负载平衡环境,其中 SSL 在 LB 上终止,其下的所有流量都是 HTTP。我们有要求用户进行身份验证的页面,并且我们还要求身份验证 cookie 带有“安全”标志。整个网站必须在 SSL 下运行。

我想在我的本地机器上模拟实时环境,即我想在 HTTP 连接下配置“安全”cookie。到目前为止,我设法达到了以下目的:

Request.IsSecureConnection == true;
Request.ServerVariables["HTTPS"] == "on";

我通过在 IIS 中手动添加 https 变量来做到这一点:

  <rewrite>
      <rules>
          <rule name="HTTPS_Always_ON" patternSyntax="Wildcard">
              <match url="*" negate="false" />
              <serverVariables>
                    <set name="HTTPS" value="on" />
              </serverVariables>
              <action type="None" />
          </rule>
      </rules>
  </rewrite>

问题是我仍然无法在 HTTP 下读取身份验证 cookie。我必须明确切换到 https 连接。

是否可以欺骗 asp.net 在 http 连接下读取安全 cookie?如果是这样,那我需要做什么?

更新:我的帖子描述了问题,但并不完全正确。浏览器不会通过 HTTP 发送标记为“安全”的 cookie,因此无法直接测试我的代码。我需要模拟负载均衡器,它终止 SSL 并将所有流量通过 HTTP 转发到实际的 Web 服务器。看来您可以在一台机器上执行此操作而不会遇到重大困难。

【问题讨论】:

    标签: asp.net ssl forms-authentication httpcookie


    【解决方案1】:

    问题不在于 ASP.NET 应用程序,而在于浏览器永远不会通过 HTTP 发送安全 cookie。我仍然需要在本地机器上模拟负载均衡器的行为,这是解决方案:

    • 安装 IIS ARR v3.0 和 URL Rewrite 模块 - 它们有助于在 IIS 中设置反向代理
    • 在 ARR 模块设置中启用反向代理功能
    • 在 IIS 中创建两个站点 - 第一个站点在 https://test.local 下工作,第二个站点在 http://test.local 下可用。在 IIS 中,第一个站点指向文件系统上的某个空文件夹,而第二个站点是您的实际 Web 应用程序。第一个网站的目的是模拟负载均衡器,即终止 SSL 并将所有流量转发到第二个网站 - http://test.local。反过来,第二个站点模拟隐藏在 LB 后面的网络服务器。
    • 转到第一个网站 (HTTPS) 并创建一个“反向代理”类型的简单通配符规则,将所有流量重定向到第二个站点。选中复选框“启用 SSL 卸载”。
    • 现在您可以检查,当您浏览到 https://test.local 时,您的 Web 应用程序将 URL 视为 https://test.local:80,即您在通过 HTTP 在端口 80 上运行时在 URL 中保留了“https”。工作完成。李>

    【讨论】:

      【解决方案2】:

      如果你可以在http下阅读https内容,互联网将陷入困境!我不认为你在正确的轨道上。

      相反,您是否能够: - 将自签名证书安装到本地计算机 - 完全在 HTTPS 下运行测试,就像服务器一样 - 只是没有网络基础设施,例如负载平衡器。

      【讨论】:

      • 这就是问题所在。过去 LB 连接不再安全,它是 HTTP,我想在本地模拟相同的环境。我的问题不是为了公平阅读 http 下的 https 内容
      • '是否可以欺骗 asp.net 在 http 连接下读取安全 cookie?' - 在我看来,这正是你所要求的! - 如果您在本地运行,那么检查 Request.IsLocal 并设置 HTTPS = 'on' 和 IsSecureConnection = true 怎么样?或者 - 在配置设置中添加不同的匹配规则。
      • 在不详细说明的情况下,我必须确保我在 LB 后面的应用程序接受了一个“安全的”身份验证 cookie,其中连接不再受到保护。简而言之,这都是问题。正如我在 OP 中所写,我已经将服务器变量“HTTPS”设置为“ON”,并且 ASP.NET 写道“Request.IsSecureConnection”等于 true。我不知道缺少什么,以便 ASP.NET 身份验证也能正常工作
      • 问题仅仅是浏览器没有将cookie发送到服务器,因为它被标记为“安全”吗?但是所有这些设置都应该在生产环境中工作吗?
      • 正确。对 httpcookie 的安全始终确保它不能被中间人读取。但是,显然,启用此功能对您也非常有益。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 2020-06-28
      • 2020-10-22
      • 2017-04-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多