2010-03-11 63 views
2

我们有一些遗留的ASP.NET代码,用于检测请求是否安全,并在需要时重定向到https版本的页面。ASP.NET Request.ServerVariables [“SERVER_PORT_SECURE”]和代理SSL通过负载平衡器

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

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

其后果是所有请求都以HTTP身份显示给Web服务器。

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

你知道负载均衡器配置将发送标题,以便不需要更改应用程序代码吗?

+2

我只是感到惊讶,鉴于Request.IsSecureConnection已存在7年,他们将使用此方法来检测安全连接。 – 2010-03-11 19:49:00

+0

我想我们可以梳理我们的遗留代码并进行这些类型的更改...但是投资回报率是多少?它能解决任何问题吗? – frankadelic 2010-03-12 04:52:48

+0

不存在你的情况,因为你的连接总是在F5后面看起来不安全。您需要写入标题并在Global.asax.cs中查看Begin Request。 – 2010-03-15 20:48:18

回答

2

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

+1

这是否可以通过这样的方式来完成,即标题不能被欺骗? 例如,如果通过HTTP的入站请求包含自定义标头,则负载平衡器是否足够智能,无法将其传递到Web服务器? – frankadelic 2010-03-11 22:33:31

+1

只需创建一个iRule,以便在存在的情况下始终删除,然后使用私有的已知值创建入站报头,并在出路时将其除去。这样下游用户永远不会得到标题,也不知道存储在其中的密钥。 – 2010-03-11 22:35:21