实际上,RHEL并未提供任何可用作CA信任目的的“证书目录”的内容。对于OpenSSL,证书目录-“ CApath”-是包含单个证书文件(PEM格式或OpenSSL扩展的“受信任证书”格式)的目录,其名称基于证书主题名称的哈希值采用特定格式。通常,这是通过将具有人类可读名称和.pem
扩展名的文件放在目录中并c_rehash
在其上运行来实现的(请参见man c_rehash
)。对于自3.3.6起的GnuTLS(该GnuTLS之前没有目录支持),它只是其中包含PEM文件的目录;GnuTLS将尝试加载目录中的每个文件,并以任何PEM格式成功执行(它无法处理OpenSSL的“受信任证书”格式)。老实说,我不确定NSS是否可以以某种方式实际使用充满单个证书文件的目录作为信任根,但是OpenLDAP的文档似乎建议它可以(但是,如果该目录还包含NSS数据库,它将给予该优先级)。不管怎样,RHEL都没有像一个目录,里面充满了各个CA证书文件。
Debian及其衍生产品/etc/ssl/certs
以这种格式提供;/etc/ssl/certs
是Debian上的规范信任库位置,而IMO提供的任何内容都应该基本上像Debian那样进行布局,因为Debian自1999年以来就以与/etc/ssl/certs
目录几乎相同的方式进行了布局。RHEL有一个目录,但它位于不是这种格式-它根本不包含任何单独的证书文件。您不能将其用作CApath。老实说,在RHEL(以及Fedora及其衍生产品)上,该目录基本上是一个陷阱。不要使用它。(请参阅https://bugzilla.redhat.com/show_bug.cgi?id=572725和https://bugzilla.redhat.com/show_bug.cgi?id=1053882了解为什么它首先存在的背景以及我如何设法解决它)。因此,我认为您对发生的事情是正确的,但对于其原因却是错误的。OpenLDAP并没有做错任何事情,并且没有失败,因为“ ca-bundle.trust.crt ...是Mozilla NSS证书/密钥数据库”(这些被称为cert8/9.db
和key3/4.db
,RHEL上的系统级数据库都位于其中/etc/pki/nssdb
) ,这只是失败了,因为/etc/ssl/certs
根本无法用作“证书目录”。
RHEL在任何其他地方都没有提供可用作CApath样式的信任库的任何内容。RHEL的系统信任库作为单个PEM捆绑文件(在OpenSSL中为“ CAfile”)提供,可在/etc/pki/tls/certs/ca-bundle.crt
和找到/etc/pki/tls/cert.pem
。也可以在处找到它/etc/ssl/certs/ca-bundle.crt
,/etc/ssl/certs
实际上实际上是的符号链接/etc/pki/tls/certs
,但是该位置不是规范的,因此实际上任何人都不应使用该位置。RHEL还提供了OpenSSL的“受信任证书”格式的捆绑包/etc/pki/tls/certs/ca-bundle.trust.crt
。
如您所知,正确的做法是使用系统提供的捆绑文件。您的答案会奏效,但是由于上述原因,我强烈建议TLS_CACERT=/etc/pki/tls/certs/ca-bundle.crt
或TLS_CACERT=/etc/pki/tls/cert.pem
超过TLS_CACERT=/etc/ssl/certs/ca-bundle.crt
。
(顺便说一句,在这方面并没有什么新奇的东西,但是在Internet上的混乱非常普遍。RH和衍生产品从未提供过完整的证书目录。它们从2000年开始提供捆绑文件。在2005年从/ usr / share / ssl移至/ etc / pki / tls。自从石器时代以来,Debian /etc/ssl/certs
或多或少都具有CApath风格的目录和/etc/ssl/certs/ca-certificates.crt
捆绑文件的功能。)