雙向SSL說明
回答
這兩個證書都應該在連接之前存在。它們通常由認證機構創建(不一定相同)。 (有替代情況下,驗證可以做不同的,但一些驗證將要進行必要)。
服務器證書應該由客戶端信任(及以下的命名約定在RFC 6125定義的CA創建)。
客戶端證書應該由服務器信任的CA創建。
這取決於每一方選擇信任。
有一些在線CA工具可以讓您在瀏覽器中申請證書,並在CA發佈證書後將其安裝到證書中。它們不需要位於請求客戶端證書認證的服務器上。
證書分配和信任管理是通過CA實現的公鑰基礎設施(PKI)的作用。 SSL/TLS客戶端和服務器,然後只是該PKI的用戶。
當客戶端連接到請求客戶端證書認證的服務器時,服務器會發送它願意接受的CA列表作爲客戶端證書請求的一部分。客戶隨後可以發送其客戶證書,如果它希望並且合適的證書可用。
客戶端證書身份驗證的主要優點是:
- 私人信息(私鑰)永遠不會發送到服務器。客戶端在認證過程中根本不會泄露它的祕密。
- 不知道具有該證書的用戶的服務器仍然可以對該用戶進行身份驗證,前提是該用戶信任頒發證書的CA(並且該證書有效)。這與使用護照的方式非常相似:您可能從未見過向您出示護照的人,但由於您信任簽發機構,因此您可以將該身份與該人聯繫起來。
您可能也有興趣Advantages of client certificates for client authentication? (on Security.SE)。
您稱之爲「雙向SSL」通常稱爲帶客戶端證書認證的TLS/SSL。
在與example.com的「正常」TLS連接中,只有客戶端驗證它確實正在與example.com的服務器進行通信。服務器不知道客戶是誰。如果服務器想要認證客戶端,通常使用密碼,所以客戶端需要向服務器發送用戶名和密碼,但是這發生在TLS連接內部作爲內部協議(例如HTTP)的一部分,而不是TLS協議本身的一部分。缺點是每個站點都需要一個單獨的密碼,因爲您將密碼發送到服務器。因此,如果您在PayPal和MyPonyForum上使用相同的密碼,那麼您每次登錄到MyPonyForum時都會將此密碼發送到MyPonyForum的服務器,以便此服務器的運營商可以攔截它並在PayPal上嘗試它,並可以使用您的名字進行付款。
客戶端證書認證提供了另一種在TLS連接中驗證客戶端的方法。與密碼登錄相反,客戶端證書認證被指定爲TLS協議的一部分。它與客戶端驗證服務器的方式類似:客戶端生成一個公鑰,並將公鑰提交給受信任的CA進行簽名。 CA返回可用於認證客戶端的客戶端證書。客戶端現在可以使用相同的證書對不同的服務器進行身份驗證(即,您可以對PayPal和MyPonyForum使用相同的證書,而不會冒着可能被濫用的風險)。它的工作方式是,服務器發送證書後,它會要求客戶端提供證書。然後發生一些公鑰魔術(如果你想知道詳細信息,請閱讀RFC 5246),現在客戶端知道它與正確的服務器通信,服務器知道它與正確的客戶端進行通信,並且都有一些共同的密鑰材料來加密和驗證連接。
我創建了一個client-rest-api,它調用了一個server-rest-api(單向通話)。我的client-rest-api使用由server-rest-api發佈的證書。但是我的客戶端rest-api從來沒有向server-rest-api發出任何證書。它是根據單向SSL還是雙向SSL? 事件,雖然它只是從客戶端到服務器的單向調用,但我認爲它的雙向ssl,因爲在這裏server-rest-api驗證客戶端是否具有服務器發出的正確證書? –
@HimalayMajumdar:如果你的服務器有一個由CA簽名的證書,或者你已經將該證書硬編碼到你的客戶端(固定),那麼是的,它仍然是適當的TLS和客戶端證書驗證(你稱之爲two-way-ssl)。好極了 :-)。但是,如果您的客戶盲目地信任您的服務器證書,它在技術上仍然是帶有客戶端證書身份驗證的TLS,但是由於服務器證書無法由客戶端進行檢查,所以不是雙向的,而且在大多數情況下這是一個非常糟糕的主意。不要這麼做:-(。 – NEOatNHNG
通常當我編寫Java客戶端調用支持https的服務(自簽名https)時,客戶端通常會因爲默認情況下不信任證書而失敗。只是將服務器發佈的證書導入到我的類路徑中,以便服務器信任我的客戶端,我猜想通過導入證書甚至我的客戶端自動信任服務器。感謝您的回覆。 –
在雙向ssl客戶端請求服務器數字證書和服務器從客戶端請求相同。雖然它有點慢,但它更安全,因爲它是兩種方式。通常我們不會關注它,因爲服務器不關心客戶端的身份,但客戶端需要確定它所連接的服務器的完整性。
- 1. 雙向SSL驗證
- 2. Angular2 BrowserSync雙向SSL
- 3. Tomcat - 啓用雙向SSL
- 4. 雙向SSL或單向SSL在單向休息時調用?
- 5. DNS重定向說明
- 6. Tomcat - 雙向SSL作爲服務器
- 7. Android上支持雙向SSL握手嗎?
- 8. symmetricDS雙向ssl握手(clientAuth = false)
- 9. 集中傳出雙向SSL連接
- 10. 雙向SSL認證和請求授權
- 11. SSL通信的雙向身份驗證
- 12. Netty中的雙向SSL身份驗證
- 13. 與Tomcat的雙向SSL通信
- 14. 需要說明的雙標記函數聲明
- 15. 64 vs 32位雙向解析問題與往返格式說明符「R」
- 16. 關於「面向連接」的說明
- 17. 如何向FAKE目標添加說明?
- 18. Java向下兼容性說明
- 19. ZendFramework:向子表單添加說明
- 20. 清除向Selenium添加Javascript的說明?
- 21. 向shadowbox圖像添加說明
- 22. 如何知道https服務器是單向還是雙向ssl
- 23. 同時使用JBoss單向和雙向SSL
- 24. 說明
- 25. 說明
- 26. 說明
- 27. 說明
- 28. 學說OneToOne雙向和單向ZF2 Fieldsets not saving/hydrating
- 29. 雙向氣泡排序證明
- 30. OneToOne雙向雙向關聯
+1對於一個很好的解釋,而不是給予請求谷歌答案;) – Dexters
你應該用'signed by'替換'created'以保持這個相關性 – CharlieS
@CharlieS「*保持這種相關性*」...你的意思是它是在使用「創建」(與問題相符的措辭)時不相關;-)? 「發佈」確實可能是一個更好的詞。 – Bruno