双向SSL CA安全

时间:2013-12-24 12:26:34

标签: security ssl

使用客户端证书身份验证的双向SSL。

服务器S1信任CA1颁发的客户端证书。客户端C1获得由CA1签名的证书CR1。现在S1和C1都可以通信,因为C1可以呈现由CA1签名的CR1。

现在恶意客户端C2获得由CA1签名的证书CR2,CA1将为恶意客户端C2签署证书。 C2也可以与服务器通信,因为C2具有由CA1签名的CR2。

我的问题是:双向SSL如何安全,因为任何客户端都可以验证自己。

我认为Server会验证域名或通用名称以及客户端证书。这是对的吗?

3 个答案:

答案 0 :(得分:1)

这实际上取决于您对“安全”的定义以及您的要求。您是否正确,任何拥有来自受信任证书颁发机构的证书的人都可以连接到服务器,因此安全性取决于您对服务器配置的证书颁发机构的信任程度。这可能包括世界上的每个公共CA,或者您可以将其限制为您自己创建的内部CA,并且仅用于向系统的有效用户颁发证书。

如果证书是由公共CA颁发的,您可以将其视为使用OpenID(例如使用Google登录) - 用户的身份已经过其他人验证,但这并不意味着您相信他们。实际上,这不是常见的情况。我没有听说过基于公共CA颁发的证书提供访问权限的主要站点。您可能会使用它来保护客户端应用程序和服务器之间的通信,例如,您自己创建证书。

检查证书是否由有效CA颁发,就像Web服务器通常一样。 您可以在应用程序级别进行其他检查,在这些检查中,您可以根据允许访问系统的已知用户数据库检查CN,但我不知道任何服务器会自动执行此操作。

答案 1 :(得分:0)

客户端身份验证仅保证证书所有者确实是C1或C2。它将一些名称附加到客户端,服务器可以信任该名称。

服务器想要与此客户端通信的地方是授权,完全超出PKI / TLS /加密范围。服务器可能会向C1提供一些信息,并立即关闭与C2的连接,或要求C2向服务器注册,或其他。

答案 2 :(得分:0)

这取决于。通常,CA应限制为仅签署来自特定客户端的证书请求。因此,在这种情况下,CR2永远不会被签名,甚至不会发生这种攻击。如果无法避免签名本身,则可以使用客户端证书的身份来阻止此攻击。如果公司内部已建立公钥基础结构(证书树和管理),而不是依赖可信第三方(商业CA),则通常会出现这种情况。

有多种方法可以避免这种攻击。

  • 如果您只有一两个客户端(通常是机器间通信的情况(服务器相互通信),那么您可以直接信任客户端证书,而不是信任CA.

  • 您也可以使用OCSP服务器仅允许某些证书。

  • 还可以部署使用序列号(和/或证书的哈希ID)的白名单。该检查可以在应用程序级别执行;例如,可以将应用程序服务器配置为使证书可用于servlet。

总而言之,这取决于。