由SSLCaCertificateFile包混淆

Mat*_*lma 5 apache ssl ssl-certificate

在Apache SSL conf上使用SSLCACertificateFile参数我无法理解.举例来说,我有一个ROOT证书"A",颁发了中间证书"B".然后,我使用B生成了几个叶子证书,比如说"L1","L2".

现在,根据文档,如果我只想信任L1和L2,我应该将"B"和"A"放在SSLCACertificateFile指向的文件中(如果我只放置证书"B",则Apache无法找到 - 发行人错误).

现在,让我们生成另一个证书"C",派生自"A"(根).apache会信任使用证书C的同行吗?对我来说,这是一个"是的,它会",因为Apache会在SSLCACertificateFile中找到"C"的发行者,它是"A"!但我不想信任C,我只想信任L1和L2.

我错过了什么吗?

非常感谢!

Ste*_*ich 3

Apache 使用的底层 TLS 堆栈是 OpenSSL。默认情况下,OpenSSL 需要自签名根证书作为最终信任锚,这意味着仅将中间 CA 证书添加到信任存储区是不够的。自 OpenSSL 1.0.2 起,就有了 X509_V_FLAG_PARTIAL_CHAIN 标志,这使得这成为可能,但我没有看到它在 Apache 源代码中使用。

因此,如果您对根 CA 和中间 CA 没有任何控制权,则无法将 Apache 配置为仅信任中间 CA,而不信任根 CA 直接或间接颁发的任何其他证书。

但是,如果您可以控制中间 CA 证书 B(即拥有私钥),那么您可以颁发具有相同主题和 B 私钥的另一个 CA 证书 B2,但使其自签名。由于主题和公钥与 B 中的相同,B 颁发的每个证书都可以使用 B2 成功验证。由于 B2 是自签名的,您可以将其作为唯一的信任锚放入 SSLCACertificateFile 中,结果是仅接受 B/B2 颁发的证书,而不接受根 A 颁发的其他证书。