如何使用数字证书来实现两个用户之间的相互身份验证?假设在银行,员工在传输敏感数据之前必须相互验证。在这种情况下,数字证书如何才能有所帮助?
发布于 2018-11-27 15:16:03
当一方使用证书进行身份验证时,它基本上证明它可以使用与证书中的公用钥匙相关联的私钥--因为它假定私钥是秘密的,只有证书的所有人才知道。
为了证明对私钥的访问,认证方签署了至少部分由对等方决定的挑战(以阻止重放攻击)。然后,对等方可以使用公共证书中的公钥验证签名。
由于成功的签名只证明对特定证书的私钥的访问,对等方还必须验证证书是否符合其期望,即证书通常由受信任的证书颁发机构(CA)签名,具有特定的主题,未过期或撤消,并且具有正确的密钥使用扩展。
在TLS中,通常只对服务器进行身份验证,签名是ServerKeyExchange消息的一部分,并且是在各种数据上完成的,这些数据还包括客户端确定的ClientHello.random。客户端通常要求正确的主机名与服务器证书、主题替代名称(SAN)或(旧的和过时的)匹配证书主题CN。
通过相互身份验证,服务器还请求客户端对自己进行身份验证。这是使用CertificateRequest消息完成的。此消息还可以是服务器愿意接受的CA列表,作为客户端证书的颁发者,以便客户端应用程序可以选择预期的证书。如果客户端接收到此CertificateRequest并具有匹配的客户端证书,它将与此证书一起发送一条Certificate消息。此外,它将发送一条CertificateVerify消息,其中包括用客户端证书私钥创建的签名,并覆盖迄今为止发送的所有握手消息--其中包括服务器确定的ServerHello.random。
客户端证书的确切验证和与特定客户端关联的方式尚未定义,但通常会接受由特定CA颁发的任何证书,并且客户端名称或电子邮件将从证书主题CN中提取。
https://security.stackexchange.com/questions/198486
复制相似问题