【问题标题】:ASP.NET Request.ServerVariables["SERVER_PORT_SECURE"] and proxy SSL by load balancerASP.NET Request.ServerVariables["SERVER_PORT_SECURE"] 和负载均衡器的代理 SSL
【发布时间】:2011-01-26 13:10:58
【问题描述】:

我们有一些旧的 ASP.NET 代码可以检测请求是否安全,并在需要时重定向到页面的 https 版本。

此代码使用 Request.ServerVariables["SERVER_PORT_SECURE"] 来检测是否需要 SSL。

我们的运营团队建议在负载均衡器 (F5 Big-IP) 上而不是在 Web 服务器上执行 SSL 代理(出于本问题的目的,假设这是一项要求)

结果将是所有请求都以 HTTP 的形式出现在 Web 服务器上。

我的问题:我们如何让 Web 服务器在传入连接到达负载均衡器之前知道它是安全的?我们可以继续使用 Request.ServerVariables["SERVER_PORT_SECURE"] 吗?

您知道将发送标头以便无需更改应用程序代码的负载平衡器配置吗?

【问题讨论】:

  • 我很惊讶,因为 Request.IsSecureConnection 已经存在了 7 年,他们会使用这种方法来检测安全连接。
  • 我想我们可以梳理遗留代码并进行这些类型的更改...但是投资回报率是多少?能解决什么问题吗?
  • 不适合您的情况,因为您的连接在 F5 后面似乎总是不安全。您需要写入标头并在 Global.asax.cs 中检查开始请求。

标签: asp.net iis ssl https load-balancing


【解决方案1】:

使用 iRule 有效地将自定义元素添加到 HTTP 标头,然后通过 Request.Headers 在 ASP.NET 代码中检测它。深入研究 Request.Headers 对象的集合以及您的 F5 硬件可能已经在其中一个 HTTP 标头上进行了标记。

【讨论】:

  • 这可以通过这样一种方式来完成,即标题不能被欺骗吗?例如,如果通过 HTTP 的入站请求包含自定义标头,负载均衡器是否足够聪明,不会将其传递给 Web 服务器?
  • 只需创建一个 iRule 以始终删除(如果存在),然后创建具有私有已知值的入站标头,并在退出时将其剥离。这样下游用户永远不会得到标头,也不知道其中存储的密钥。
猜你喜欢
  • 2020-10-06
  • 1970-01-01
  • 2021-12-07
  • 2015-09-30
  • 1970-01-01
  • 2016-11-10
  • 2011-09-20
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多