2009-06-15 93 views
20

我有一個aspx頁面正在檢查Request.IsSecureConnection以確保它是真實的,如果沒有,它會重定向到安全頁面https://www.domain.com/page.aspx爲什麼Request.IsSecureConnection在預期值爲true時返回false

服務器爲域安裝了SSL證書,瀏覽器顯示掛鎖圖標。

相同的代碼在其他服務器上運行正常,但現在Request.IsSecureConnection始終返回false。

我創建了一個完全空的aspx文件,它只是打印Request.IsSecureConnection的返回值,它仍然是假的,所以沒有其他內容來自標準http請求。

任何人都可以提出什麼可能會導致這種情況,或者提供任何提示,我可能會發現什麼導致這總是返回false?

回答

28

如果您的網絡服務器前面有一個負載平衡路由器或類似的終端,那麼從那裏到您的網絡服務器的連接將不會通過SSL。在這種情況下,您通常必須檢查特定端口上的連接或由負載平衡器設置的標頭。

+3

或者讓他負載平衡器,以確保從客戶端到您的網站的連接是安全的。 – 2009-06-15 21:22:52

+0

他應該能夠通過在該測試頁上輸出Request.UserHostAddress和/或Request.UserHostName來確認此懷疑。如果這些值不是他所連接的客戶端(或客戶端正在經歷的代理),那麼他們很可能會識別位於其Web服務器前的某種負載平衡器或反向代理。 – 2009-06-15 21:25:53

1

某些負載均衡器向請求添加了一個新的標頭,您可以使用該標頭來確定來自客戶端的原始請求是否通過了SSL。隨着Azure的網站下面的代碼似乎工作:

if (string.IsNullOrEmpty(Request.Headers["x-arr-ssl"])) 
{ 
    // No SSL 
} 
else 
{ 
    // Secure connection 
} 

一些其他的負載平衡器可以使用另一頭,例如X-轉發 - 協議。

相關問題