我有你的問題分解成兩個部分。一個
部分:Let's say a hacker X sends a CA issued certified to the server as part of handshake. Then server would automatically trust it and grant access.
如果X aquires一個真實的客戶端的客戶端證書,然後沒關係。因爲證書本身不包含任何祕密。這些證書可以在任何地方沒有做任何損害(除非你想保持你的電子郵件地址保密,儘量不要發表公佈。但它可能會在一段時間後走出去,而且公司製作的X509CertificateExtensions不考慮以及)。
私鑰是必須由客戶保守祕密的重要關鍵。如果X也獲得私鑰,則X可以強制一個可信的客戶端並登錄到您的系統中。因此客戶端必須保護這些私鑰不被盜用!
這是因爲內的客戶端身份驗證握手,服務器不僅要求客戶端證書。客戶還必須通過使用他的私鑰來證明他是該證書的真正擁有者,如the wiki you referenced所述:The client sends a CertificateVerify message, which is a signature over the previous handshake messages using the client's certificate's private key.
這樣的簽名可以只有如果客戶端擁有屬於證書的私鑰, wiki以及:This lets the server know that the client has access to the private key of the certificate and thus owns the certificate.
!
第二部分:How do establish a initial trust relationship?
這部分是困難的,如果有涉及到許多客戶。這就是PKI成立的原因。您信任CA,並且CA應該對請求證書的客戶進行身份檢查。
自制軟件解決方案,在這種情況下,你有你自己的CA,或者你不信任的CA,部分是由你。 您必須確保您只能爲真正的客戶提供服務。如果您通過USB鑰匙進行此操作,並且客戶親自將它們交給您,那沒關係。
如果您收到一封電子郵件,內容爲「您好,我是ABC的朋友XYZ,請記住?順便說一句,這是我的證書」 - 檢查兩次。