IIS:如何在负载均衡器上模拟 SSL 终止
IIS: How to simulate SSL termination on load balancer
情况:
负载平衡环境,其中 SSL 在 LB 上终止,其下的所有流量都是 HTTP。我们有要求用户进行身份验证的页面,我们还要求身份验证 cookie 带有标志 "secured"。整个网站必须 运行 使用 SSL。
我想在我的本地机器上模拟实时环境,即我想在 HTTP 连接下配置 "secured" 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?如果是这样,那我需要做什么?
更新:我的 post 描述了问题,但并不完全正确。浏览器不会通过 HTTP 发送标记为 "secure" 的 cookie,因此无法直接测试我的代码。我需要模拟负载均衡器,它终止 SSL 并将所有流量通过 HTTP 转发到实际的 Web 服务器。看来您可以在一台机器上完成此操作而不会遇到太大困难。
如果你能在http下阅读https内容,那互联网就水深火热了!我不认为你在正确的轨道上。
相反,您是否能够:
- 将自签名证书安装到本地计算机
- 运行 您的测试完全在 HTTPS 下进行,就像服务器一样 - 只是没有负载平衡器等网络基础设施。
问题不在于 ASP.NET 应用程序,而在于浏览器永远不会通过 HTTP 发送安全 cookie。我仍然需要在我的本地机器上模拟负载均衡器的行为,这里是解决方案:
- 安装 IIS ARR v3.0 和 URL 重写模块 - 它们有助于在 IIS 中设置反向代理
- 在 ARR 模块设置中启用反向代理功能
- 在 IIS 中创建两个站点 - 第一个在 https://test.local and the second site is available under http://test.local. In IIS the first site points to some empty folder on the file system, while second website is your actual web application. The purpose of the first website is to simulate load balancer, i.e. terminate SSL and forward all traffic to the second site - http://test.local 下运行。反过来,第二个站点模拟隐藏在 LB 后面的网络服务器。
- 转到第一个网站 (HTTPS) 并创建一个 "Reverse proxy" 类型的简单通配符规则,将所有流量重定向到第二个网站。 Select 复选框 "Enable SSL Offloading"。
- 现在您可以在浏览到 https://test.local, your web application sees the URL as https://test.local:80 时检查,即您在 URL 中保留了 "https",而在端口 80 上通过 HTTP 运行 保留了 运行。工作完成.
情况:
负载平衡环境,其中 SSL 在 LB 上终止,其下的所有流量都是 HTTP。我们有要求用户进行身份验证的页面,我们还要求身份验证 cookie 带有标志 "secured"。整个网站必须 运行 使用 SSL。
我想在我的本地机器上模拟实时环境,即我想在 HTTP 连接下配置 "secured" 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?如果是这样,那我需要做什么?
更新:我的 post 描述了问题,但并不完全正确。浏览器不会通过 HTTP 发送标记为 "secure" 的 cookie,因此无法直接测试我的代码。我需要模拟负载均衡器,它终止 SSL 并将所有流量通过 HTTP 转发到实际的 Web 服务器。看来您可以在一台机器上完成此操作而不会遇到太大困难。
如果你能在http下阅读https内容,那互联网就水深火热了!我不认为你在正确的轨道上。
相反,您是否能够: - 将自签名证书安装到本地计算机 - 运行 您的测试完全在 HTTPS 下进行,就像服务器一样 - 只是没有负载平衡器等网络基础设施。
问题不在于 ASP.NET 应用程序,而在于浏览器永远不会通过 HTTP 发送安全 cookie。我仍然需要在我的本地机器上模拟负载均衡器的行为,这里是解决方案:
- 安装 IIS ARR v3.0 和 URL 重写模块 - 它们有助于在 IIS 中设置反向代理
- 在 ARR 模块设置中启用反向代理功能
- 在 IIS 中创建两个站点 - 第一个在 https://test.local and the second site is available under http://test.local. In IIS the first site points to some empty folder on the file system, while second website is your actual web application. The purpose of the first website is to simulate load balancer, i.e. terminate SSL and forward all traffic to the second site - http://test.local 下运行。反过来,第二个站点模拟隐藏在 LB 后面的网络服务器。
- 转到第一个网站 (HTTPS) 并创建一个 "Reverse proxy" 类型的简单通配符规则,将所有流量重定向到第二个网站。 Select 复选框 "Enable SSL Offloading"。
- 现在您可以在浏览到 https://test.local, your web application sees the URL as https://test.local:80 时检查,即您在 URL 中保留了 "https",而在端口 80 上通过 HTTP 运行 保留了 运行。工作完成.