2016-01-06 56 views
2

我將我的網站發佈到一個IIS服務器,我無法控制,並且我想從代碼隱藏中瞭解,如果它的URL以「http」或「https」開頭。檢查Url是否以「http」或「https」開頭,非安全Url是否可能以「https」開頭?

首先,我想對我的地方這兩種解決方案,都返回正確的值(「HTTP」):

this.Request.Url.Scheme 

Request.IsSecureConnection 

可以肯定的,我也裝一個安全的SSL連接到自己的電腦的IIS ,併發布了相同的代碼。這兩個代碼也都抓取了正確的值(https)。

但是,當我將其發佈到使用「https」的我公司的IIS服務器時,它將返回爲「http」。

這裏會有什麼問題?我注意到我嘗試的URL可能不會被認爲是一個安全的層,即使它以「https」開頭(當我從谷歌瀏覽器調用頁面時,它不會變成綠色並顯示爲安全),所以也許它不是一個安全層,它只是常規頁面只能以「https」而不是http開頭。這種情況可能嗎?

回答

1

一種可能性可能是您的Web應用程序前有代理或負載平衡器。它可能會在到達您的網站之前「卸載」SSL。

另外,正如您所指出的,只需在瀏覽器中指定https並不能保證您的SSL證書正常工作和正確配置。嘗試使用https://www.ssllabs.com/ssltest/之類的工具來幫助識別問題。

+0

謝謝。是的,我正在考慮某種代理屏障是可能的。我當然知道用「https」請求替換所有的「http」請求。 但是,從您建議的工具測試中傳遞的網頁。這意味着我實際上是一個安全的網站,但這些代碼塊無論如何都會返回「http」。 據我所知,你基本上說:「有些東西在IIS上負責將請求中的」http「轉換爲」https「,但是你的代碼無法理解,並且就像是http一樣。」那是對的嗎?你有關於如何證明/避免這個問題的想法嗎? –

+0

想象一下,數據通過如下鏈傳輸:用戶 - > Internet - >負載平衡器 - >服務器 - >應用程序。在這種情況下,通常只能通過SSL從用戶傳輸到負載均衡器,但在負載均衡器和應用程序之間不需要麻煩。如果我們想象鏈中的代理,則可以擁有相同的場景。這可能會讓您的應用程序更難以檢查原始方案。然而,通常原始方案將被放置在諸如X-Forwarded-Proto的標題中。這是一個很大的話題,但Google關於X-Forwarded-Proto和SSL卸載。 – cbp

+0

會做。感謝細節。 –

相關問題