使用客户端证书身份验证的两种方式SSL。
服务器S1信任由CA1颁发的客户端证书。客户端C1获得由CA1签名的证书CR1。现在,S1和C1都可以通信,因为C1可以显示由CA1签名的CR1。
现在,恶意客户端C2获得了由CA1签名的证书CR2,CA1将为恶意客户端C2签名证书。 C2也可以与服务器通信,因为C2具有由CA1签名的CR2。
我的问题是:那么,任何客户端都可以通过SSL进行身份验证的两种方式是安全的。
我认为服务器将验证域名或通用名称以及客户端证书。它是否正确?
最佳答案
这实际上取决于您对“安全”的定义以及您的要求。您是正确的,任何拥有来自受信任证书颁发机构的证书的人都可以连接到服务器,因此安全性取决于您对配置服务器的证书颁发机构的信任程度。这可能包括世界上每个公共CA,也可以将其限制为您创建的内部CA,仅用于向系统的有效用户颁发证书。
如果证书是由公共CA颁发的,则可以认为它有点像使用OpenID(例如,使用Google登录)-用户的身份已被其他人验证,但这并不意味着您信任它们。实际上,这不是常见的情况。我从未听说过有一个主要站点提供基于公共CA颁发的证书的访问权限。例如,您可能会用它来保护客户端应用程序和服务器之间的通信安全,而您自己在其中创建证书。
Web服务器通常会检查该证书是由有效的CA颁发的。
您可以在应用程序级别进行其他检查,在该应用程序级别上,根据允许访问系统的已知用户的数据库对CN进行检查,但是我不知道有任何服务器可以自动执行此操作。