2010-03-11 64 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