2013-10-12 129 views
0

我正在構建一個.net應用程序,並且希望使Web通話足夠安全,從而不容易通過諸如提琴手之類的方式監視通信。我希望能夠知道來自服務器的證書不符合預期,並且永遠不會發出請求數據的完整請求。C#:在發送HTTP GET/POST之前驗證服務器證書

Twitter的iOS應用會這樣做。我認爲有人會以某種方式製作Twitter的https證書的副本並製作該提琴手的證書。我自己並沒有這樣做,但我認爲這就是我的理解。你在小提琴手中看到的是該隧道已經創建,但實際上沒有提出任何請求。當你沒有在設備上安裝提琴手的HTTPS證書並且你打開一個瀏覽器到google.com /一個隧道時,同樣的情況就會被創建,然後瀏覽器知道'uhoh不受信任的服務器'並向用戶顯示一條消息。我想讓它更安全,只允許1個證書/我的服務器證書。

有意義嗎?我想我想出瞭如何做一個單獨的完整虛擬請求/但這並不理想。

回答

3

你問的是「我如何在我的客戶端應用程序中實現證書鎖定?」

要做到這一點的方法是在服務點上附加a validation callback負責提出您的HTTPS請求。您的驗證回調將覆蓋默認行爲(「接受Windows信任的任何證書」),而是驗證接收的證書完全是您期望的。

現在,你走這條路之前,請記住以下幾點:

  1. 具有管理員或Debug權限的攻擊者可以很容易地改變你的代碼在內存中刪除您的驗證。這被稱爲「可信客戶」問題。
  2. 如果代碼曾在安全設備執行HTTPS檢查的公司環境中運行,您的驗證將會中斷(例如,BlueCoat,ISA TMG等)
  3. 您的驗證將阻止「證書敏捷性」 - 如果服務器證書需要更改,您需要更新應用程序。如果您想要使用具有多個證書的負載平衡配置或公共HTTPS CDN,則需要更新驗證邏輯。
+0

非常感謝!我會很快回答這個問題。你碰巧知道是否有類似的Windows Phone 8 API? – Quincy

+0

不幸的是,如果這個確切的調用在WP8中不起作用,那表明他們沒有解決WP7中存在的缺陷。請參閱http://blogs.msdn.com/b/davidhardin/archive/2010/12/30/wp7-and-self-signed-ssl-certificates.aspx和http://connect.microsoft.com/VisualStudio/ feedback/details/368047/add-system-net-servicepointmanager-servercertificatevalidationcallback-property and http://stackoverflow.com/questions/5648506/how-to-ignore-certificate-errors-in-windows-phone-7 – EricLaw

相關問題