我一直在尝试在客户端和服务器之间设置SSL。在我调查这个问题时,除了拥有服务器的公钥之外,我无法理解CA颁发的SSL证书的有用性。
由于与CLient的证书交换未加密,如果有人可以进入客户端和服务器之间,他们可以伪装成服务器,然后使用服务器证书响应ClientHello消息(无论证书是否由是否CA.)。
由于Cert具有服务器的公钥,因此在交换主密钥秘密期间,客户端可以使用它来加密秘密,以及中间的"将无法解密,因为他没有"私钥"服务器。我认为这是最大的好处..我的理解是正确的吗?
如果我们启用客户端验证,CLient需要再次发送其证书,我在这里看不到很多好处。服务器是否使用客户端证书验证之外的客户端公钥?
答案 0 :(得分:0)
&#34>中间的男人"将无法解密,因为他没有"私钥"服务器
是的,除非MITM可以访问私钥,否则他将无法继续操作。实际上,如果查看TLS握手图, ClientKeyExchange 步骤是客户端使用服务器公钥加密预主密钥的地方,只有有权访问私钥的人才能解密那条消息。在没有私钥的情况下,TLS握手将失败。
如果客户端需要进行证书验证,则服务器会发送 CertificateRequest 消息,要求客户端提供证书。请注意,这是可选的。在这种情况下,客户端会显示自己的证书并执行 CertificateVerify 步骤,该步骤涉及客户端使用其私钥计算所有先前握手消息的数字签名,然后服务器使用此处的公钥。客户端证书,用于验证客户端是否可以访问非对称密钥的公共和私有部分。