我需要一個安全協議,客戶端在服務器之前進行身份驗證。這是必要的,因爲它是一個隱私問題。除非允許他人知道,否則我不希望任何未知的方知道他們與誰連接。在TLS協議中,服務器首先發送他的證書,從而消除了這種可能性。我知道足夠的知道實施我自己的協議是一個壞主意。但是,有沒有選擇?即有沒有辦法改變協議以其他順序發送證書? Wikipidea對TLS的引用:http://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake如何讓客戶端先進行身份驗證?
回答
您可以反轉客戶端和服務器的角色。
通常,使用TCP,客戶端是做了connect()
(併發送SYN)並且服務器是做了accept()
(它接收到SYN併發回了SYN | ACK)的端點。但是一旦建立連接,客戶端的套接字和服務器的套接字之間就不再有任何區別。
如果您使用,也就是說,OpenSSL的,你通常稱之爲SSL_connect()
成功connect()
後,你通常一個成功的accept()
後打電話SSL_accept()
。但是如果你在服務器端翻轉並在connect()
之後呼叫SSL_accept()
,並且在服務器端accept()
之後呼叫SSL_connect()
,那麼OpenSSL永遠不會知道其中的差別。客戶端將表現爲TLS服務器並首先識別自己。
這不會讓客戶端檢查服務器憑據嗎?對不起,這有點令人困惑,你能解釋一下嗎?謝謝! – chacham15 2012-01-13 04:08:43
服務器可以在客戶端完成它之後呈現其證書,就像在正常的TLS中一樣,但是向後。 – Celada 2012-01-13 04:29:05
+1。正如[TLS RFC所述](http://tools.ietf.org/html/rfc4346#appendix-B):「* client *: 該應用程序實體啓動與 服務器的TLS連接。並不意味着客戶端發起了底層傳輸連接 服務器和客戶端的主要操作 是服務器通常通過身份驗證的 ,而客戶端只能選擇 身份驗證。 – Bruno 2012-02-02 10:30:39
- 1. 客戶端身份驗證
- 2. 如何XMLRPC ::客戶端身份驗證
- 3. 如何使客戶端對ASP.NET WebAPI進行身份驗證?
- 4. 通過證書進行Oracle SOA客戶端身份驗證
- 5. 從Firefox簽署客戶端證書以進行身份驗證
- 6. 使用客戶端證書進行智能卡身份驗證
- 7. Swift 3 UrlSession通過證書進行客戶端身份驗證
- 8. 使用客戶端證書進行身份驗證
- 9. Apache HttpClient 4.3和x509客戶端證書進行身份驗證
- 10. 客戶端身份驗證或相互身份驗證
- 11. Jetty Truststore身份驗證與SSL客戶端身份驗證
- 12. Webapi身份驗證,僅使用客戶端身份驗證
- 13. 客戶端身份驗證 - 處理客戶端證書
- 14. 使用HttpClient進行客戶端身份驗證
- 15. 由服務器進行的客戶端身份驗證
- 16. MVC客戶端無法在IIS上進行身份驗證
- 17. 使用Jersey客戶端進行摘要式身份驗證
- 18. Spring WS客戶端使用Kerberos進行身份驗證
- 19. 使用客戶端身份驗證通過SSL進行卷曲
- 20. wsHttpBinding綁定,客戶端身份驗證
- 21. Spring GemFire客戶端身份驗證
- 22. OAuth2客戶端身份驗證彈出
- 23. Web服務客戶端身份驗證
- 24. 服務器客戶端身份驗證
- 25. 客戶端身份驗證(SSL)直通?
- 26. SSL握手 - 客戶端身份驗證
- 27. HttpWebRequest客戶端身份驗證
- 28. Websocket客戶端身份驗證
- 29. boost asio客戶端身份驗證
- 30. Android客戶端的RESTful身份驗證
你爲什麼要這麼做?你能否製作一個非常模糊的自簽名證書,而不是相信你的客戶的證書? – jglouie 2012-01-11 19:09:45
@jglouie問題是證書包含可識別的信息(因爲這是證書的用途),任何隨機的人員都不應該有能力識別用戶 – chacham15 2012-01-11 19:18:51
您可以將僞造識別數據放入自簽名證書中。該方法是否可行,還是您需要一個CA已被客戶信任的「真實」證書? – jglouie 2012-01-11 19:26:51