IIS:如何在负载均衡器上模拟SSL终止

时间:2015-08-10 14:25:05

标签: asp.net ssl forms-authentication httpcookie

情况:

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

我想在我的本地机器上模拟实时环境,即我想配置"安全" HTTP连接下的cookie。 Sofar,我设法达到了:

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?如果是这样,那我该怎么办?

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

2 个答案:

答案 0 :(得分:1)

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

  • 安装IIS ARR v3.0和URL重写模块 - 它们有助于在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,即您在端口80上通过HTTP运行时在URL中保留了“https”。完成。

答案 1 :(得分:0)

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

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