我需要一個安全協議,客戶端在服務器之前進行身份驗證。這是必要的,因爲它是一個隱私問題。除非允許他人知道,否則我不希望任何未知的方知道他們與誰連接。在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. 如何XMLRPC ::客戶端身份驗證
- 2. 通過證書進行Oracle SOA客戶端身份驗證
- 3. 使用客戶端證書進行身份驗證
- 4. 使用客戶端證書進行智能卡身份驗證
- 5. 從Firefox簽署客戶端證書以進行身份驗證
- 6. Jetty Truststore身份驗證與SSL客戶端身份驗證
- 7. 客戶端身份驗證 - 處理客戶端證書
- 8. 使用Jersey客戶端進行摘要式身份驗證
- 9. 由服務器進行的客戶端身份驗證
- 10. Java,客戶端NTLM身份驗證
- 11. 客戶端身份驗證(SSL)直通?
- 12. websocket客戶端的身份驗證?
- 13. IIS 7.5和客戶端身份驗證
- 14. SOAP客戶端身份驗證C#401
- 15. Web服務客戶端身份驗證
- 16. Spring GemFire客戶端身份驗證
- 17. SSL握手 - 客戶端身份驗證
- 18. 如何使用curl客戶端證書身份驗證進行上載?
- 19. Apigee客戶端應用程序客戶端身份驗證
- 20. Web Api客戶端身份驗證(非用戶身份驗證)最佳實踐
- 21. 如何支持SSL客戶端證書身份驗證?
- 22. 如何使用Axis2 ADB客戶端進行基本身份驗證?
- 23. 如何使用python泡沫客戶端進行kerberos身份驗證
- 24. 如何在WCF中使用客戶端憑據進行身份驗證?
- 25. 執行Facebook身份驗證:客戶端和服務器端
- 26. WCF客戶端證書驗證+ Windows身份驗證
- 27. Node.js:使用唯一公鑰對客戶端進行身份驗證(與Github SSH密鑰身份驗證類似)
- 28. Lua:在成功通過LuaSec進行客戶端身份驗證後如何獲取客戶端詳細信息
- 29. 無法使用iPhone中的客戶端證書進行身份驗證
- 30. 通過asp.net中的X509證書進行客戶端身份驗證
你爲什麼要這麼做?你能否製作一個非常模糊的自簽名證書,而不是相信你的客戶的證書? – jglouie 2012-01-11 19:09:45
@jglouie問題是證書包含可識別的信息(因爲這是證書的用途),任何隨機的人員都不應該有能力識別用戶 – chacham15 2012-01-11 19:18:51
您可以將僞造識別數據放入自簽名證書中。該方法是否可行,還是您需要一個CA已被客戶信任的「真實」證書? – jglouie 2012-01-11 19:26:51