我有你的问题分解成两个部分。一个
部分: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,请记住?顺便说一句,这是我的证书” - 检查两次。