2017-10-06 121 views
1

有一个PKI,其中一个CA在我的网络中颁发所有x509证书。 因此,在我的网络中,所有服务器和客户端都拥有来自我的CA的证书以及私钥,这些证书都存储在相应的密钥库中。每个服务器和客户端都有链文件中的CA证书,可用于验证TLS相互身份验证正在进行时对等x509证书的信任链。一切都好。 假设我现在在我的网络上有两台服务器和两台客户机,我想确保Client_A和Server_A使用他们的x509证书通过TLS相互身份验证成功,因为Client_B和Server_B应该这样做。 与此同时,我想确保Client_A和Server_B之间的TLS相互认证不会成功。 (在Client_B和Server_A之间也有效)。将TLS双向认证限制为特定的TLS证书

如何让我的网络中的服务器和客户端不仅验证信任链,还要尊重某种白名单?

也许这在TLS Layer上不可行,这就是我想澄清的。

回答

2

可以实现此使用任何低于2 approaches-

  1. 在TLS层验证客户端证书:创建为每个客户端组单独的中间颁发CA。例如,对于Server_A的所有客户端,创建一个名为Ca_Client_A的CA.所以你的链看起来像rootCA - > Ca_Client_A - >客户端证书。将此Ca_Client_A导入Server-A的信任存储区中。现在,Server_A将允许连接到发出ca_Client_A的客户端。同样,您可以创建Ca_Client_B中间CA由服务器B.

  2. 服务B客户端组在应用层验证客户端证书:对于这一点,你需要编写验证逻辑在应用服务器中,你需要把约束如允许的客户端证书序列号或CN名称与关键字匹配,以便成功验证。

希望有所帮助。

1

没有任何方法(我知道)在TLS层执行此操作。

大多数TLS库在证书交换期间提供回调选项,并且这将是根据列表检查证书的适当位置。返回特定于库的故障/不可接受版本通常会导致TLS握手失败,并且不会传输任何数据。

0

很多这取决于您使用的服务器软件,而不是TLS标准本身。一些软件包可以配置为信任由特定CA证书颁发的证书。在您的方案中,这将允许由您的CA颁发的任何证书连接到配置为信任您的CA证书的任何服务器。其他服务器软件可以配置为信任特定证书,或具有给定主题的证书(可分辨名称,subjectAltName等)。因此,它取决于您尝试连接的特定“服务器”。这是一个Apache Web服务器吗? IIS? Tomcat的?答案因我们所谈论的服务器平台而异。