我刚刚在一台服务器上为 slapd 设置了 TLS,使用了一个简单的 PKI,如下所示:
ldap 证书<中级 CA 证书<根 CA 证书
为了从客户端使用 TLS 连接到 ldap 服务器,我像我找到的许多教程一样,将根 CA 证书和 ldap 证书添加到受信任的证书中。
我可以通过 TLS 连接到我的 ldap 服务器
但是,为什么不需要中间 CA 证书?它是否需要由 ldap 服务器与 ldap 证书一起发送?我只在我的 slapd 配置中配置了这些:
olcTLSCACertificateFile: /etc/ldap/ssl/root.pem
olcTLSCertificateFile: /etc/ldap/ssl/ldap_crt.pem
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap_key.pem
并且看起来每个根证书和 ldap 证书文件只包含它们自己的证书。
我是不是理解错了?为什么客户端不知道中间 CA 证书是什么,它还能正常工作?
答案1
拥有中间 CA 证书的原因是为了能够离线保存根 CA 证书的私钥。
在正常的证书颁发机构设置中,根 CA 证书处于离线状态,仅用于签署中间 CA 证书,这种情况很少见,因为需要武装警卫、C 级员工和大量协议。中间 CA 私钥保持在线,用于签署来自最终客户的 TLS 证书请求。不可能维护这种协议来签署每个最终证书。
如果 CA 受到威胁,则只需要替换中间 CA(及其签名的证书);如果根 CA 受到威胁,则 CA 几乎会停止运营,因为 CA 签名的每个证书都需要替换。
此外,根 CA 必须存在于客户端的信任存储中。客户端决定接受哪些 CA 的证书,并在本地保存这些根 CA 证书。拥有任意中间证书可使 CA 在这方面更具灵活性。由于它只是由根 CA 签名,而不是由根 CA 签名,因此可以更轻松地进行更改(例如升级到更安全的哈希算法)。
在 TLS 协商期间,服务器将发送其证书和签名证书(如果不是根 CA),以及签名证书那个如果不是根 CA,则为 。由于客户端拥有根 CA 证书,因此服务器不应发送该证书。如果服务器尝试发送根 CA 证书,某些客户端将拒绝连接。
就您而言,您没有指定证书的来源或提供任何相关信息,因此只能进行猜测。
如果它们来自私有 CA,则 TLS 证书可能由根 CA 直接签名,而不是由中间 CA 签名,或者由根 CA 额外签名。客户端的信任存储中可能也有中间 CA(尽管不应该有)。