【问题标题】:Restrict TLS mutual authentication to specific TLS certificates将 TLS 相互身份验证限制为特定的 TLS 证书
【发布时间】:2017-10-06 14:02:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: authentication certificate tls1.2 pki mutual-authentication


    【解决方案1】:

    您可以使用以下 2 种方法中的任何一种来实现这一点-

    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 为客户端组 B 提供服务。

    2. 在应用层验证客户端证书: 为此,您需要在应用服务器中编写身份验证逻辑,您需要在其中放置限制条件,例如允许的客户端证书序列号或 CN 名称匹配成功认证的关键字。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-13
          • 1970-01-01
          • 2020-09-05
          • 2016-08-17
          • 2018-07-25
          • 2015-10-22
          相关资源
          最近更新 更多