我已經閱讀了大量與此問題相關的文檔,但是我仍然無法將所有代碼拼湊在一起,所以我想問幾個問題。SSL和中間人誤解
都按照我的理解,我會簡要說明了認證過程,因爲我可能會在這方面搞錯首先:客戶端啓動一個連接,其中一臺服務器與公共密鑰的組合響應,可信機構的一些元數據和數字簽名。然後,如果客戶信任服務器,則客戶端會做出決定,使用公鑰對一些隨機會話密鑰進行加密並將其發回。該會話密鑰只能使用存儲在服務器上的私鑰解密。服務器執行此操作,然後HTTPS會話開始。
因此,如果我在上面是正確的,那麼問題在於如何在這種情況下發生中間人攻擊?我的意思是,即使有人用公鑰截獲服務器(例如www.server.com)響應,並且有一些手段讓我認爲他是www.server.com,但他仍然無法解密我的會話密鑰沒有私鑰。
說到相互身份驗證,關於服務器對客戶端身份的信心是否全部?我的意思是,客戶端可以確定她正在與正確的服務器進行通信,但現在服務器想要知道客戶是誰,對嗎?
最後一個問題是關於相互認證的替代方案。如果我在所描述的情況下充當客戶端,那麼在SSL會話建立之後,如果我在HTTP頭中發送登錄名/密碼,該怎麼辦?正如我所看到的,這些信息不能被攔截,因爲連接已經安全並且服務器可以依靠它來進行識別。我錯了嗎?與相互認證相比,這種方法有什麼缺點(只有安全問題很重要,而不是實施複雜性)?
也有類似[sslstrip](http://www.thoughtcrime.org/software/sslstrip/)的工具,它會嘗試透明地將https鏈接重寫爲http鏈接。 – mpontillo 2013-02-16 07:05:07
關於證書驗證的另一點是客戶端需要驗證主機名。這不足以檢查證書是否真實,它必須發佈給您要與之交談的實體(請參閱[此處](http://stackoverflow.com/a/13742121/372643)和[此處]( http://security.stackexchange.com/q/22965/2435))。至於sslstrip,不幸的是(雖然HSTS可以提供幫助),但最終[由用戶決定是否要使用SSL/TLS](http://webmasters.stackexchange.com/a/28443/11628)。 – Bruno 2013-02-16 13:07:28
@布魯諾權利,修復,謝謝:) – 2013-02-16 16:52:30