2012-01-11 105 views
1

我需要一個安全協議,客戶端在服務器之前進行身份驗證。這是必要的,因爲它是一個隱私問題。除非允許他人知道,否則我不希望任何未知的方知道他們與誰連接。在TLS協議中,服務器首先發送他的證書,從而消除了這種可能性。我知道足夠的知道實施我自己的協議是一個壞主意。但是,有沒有選擇?即有沒有辦法改變協議以其他順序發送證書? Wikipidea對TLS的引用:http://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake如何讓客戶端先進行身份驗證?

+0

你爲什麼要這麼做?你能否製作一個非常模糊的自簽名證書,而不是相信你的客戶的證書? – jglouie 2012-01-11 19:09:45

+0

@jglouie問題是證書包含可識別的信息(因爲這是證書的用途),任何隨機的人員都不應該有能力識別用戶 – chacham15 2012-01-11 19:18:51

+0

您可以將僞造識別數據放入自簽名證書中。該方法是否可行,還是您需要一個CA已被客戶信任的「真實」證書? – jglouie 2012-01-11 19:26:51

回答

1

您可以反轉客戶端和服務器的角色。

通常,使用TCP,客戶端是做了connect()(併發送SYN)並且服務器是做了accept()(它接收到SYN併發回了SYN | ACK)的端點。但是一旦建立連接,客戶端的套接字和服務器的套接字之間就不再有任何區別。

如果您使用,也就是說,OpenSSL的,你通常稱之爲SSL_connect()成功connect()後,你通常一個成功的accept()後打電話SSL_accept()。但是如果你在服務器端翻轉並在connect()之後呼叫SSL_accept(),並且在服務器端accept()之後呼叫SSL_connect(),那麼OpenSSL永遠不會知道其中的差別。客戶端將表現爲TLS服務器並首先識別自己。

+0

這不會讓客戶端檢查服務器憑據嗎?對不起,這有點令人困惑,你能解釋一下嗎?謝謝! – chacham15 2012-01-13 04:08:43

+0

服務器可以在客戶端完成它之後呈現其證書,就像在正常的TLS中一樣,但是向後。 – Celada 2012-01-13 04:29:05

+0

+1。正如[TLS RFC所述](http://tools.ietf.org/html/rfc4346#appendix-B):「* client *: 該應用程序實體啓動與 服務器的TLS連接。並不意味着客戶端發起了底層傳輸連接 服務器和客戶端的主要操作 是服務器通常通過身份驗證的 ,而客戶端只能選擇 身份驗證。 – Bruno 2012-02-02 10:30:39

相關問題