我有一个具有共享根 CA 和多个中间 CA 的内部 PKI,我如何让任何中间 CA 颁发的任何内容都值得信任?

我有一个具有共享根 CA 和多个中间 CA 的内部 PKI,我如何让任何中间 CA 颁发的任何内容都值得信任?

情况:我有一个内部 PKI,其中包含一个共享根 CA 和多个中间 CA。我希望任何中间 CA 颁发的任何东西都能相互信任。有没有一种大多数程序/语言都能接受的方法?

我目前的理解是不是很容易实现,但我想知道我的理解是否有缺陷。

如果我们有程序:

  • 具有共享根 => 第一个 int 的信任链的时髦新鲜
  • 使用共享根的信任链进行清洁 => 第二个 int

我确实需要这两者之间的相互信任,我唯一的选择是制作一个大的 CA 证书,将 root=>first 和 root=>second 钉在一起吗?或者我能以某种方式只创建一个包含 root 的链吗?

我可以通过将根添加到操作系统级信任存储区来解决所有这些问题吗?或者,如果它们是容器,则可以将其添加到给定的容器信任存储区中?(在/etc/pki/ca-trust/source/anchors……之下)

我的第二个想法,也许这是一个坏主意,但因为一切都是内部的,而且我们有一个 CRL——我们可以仅有的使用根 CA,并严格关注 TLS 证书(而不是 CA 级证书)并保持干净的 CRL。

如果我在任何地方定义的特定端点公开 CRL 和 CA,是否有某种方法可以让软件构建自己的链?

答案1

我不确定我是否正确理解了你的问题,或者你是否理解了这个概念,但是

  • 证书之间并不信任彼此——TLS 客户端反而信任某些证书颁发机构,并从中获得对服务器证书的信任。
  • TLS 客户端基本上信任受信任 CA 颁发的每个证书,只要它符合预期,例如未过期、与主题匹配等。TLS 客户端必须能够建立到受信任 CA 的信任链。因此,TLS 客户端需要知道通常在 TLS 握手中发送的相关中间证书。

因此,如果您希望任何客户端信任任何证书,无论使用哪个中间 CA,那么 a) 客户端需要信任根 CA,并且 b) 服务器除了服务器证书之外,还需要在 TLS 握手期间发送中间 CA。

也可以看看SSL 证书框架 101:浏览器实际上如何验证给定服务器证书的有效性?

相关内容