update-ca-trust 提取不向 ca-bundle 添加证书

rGA*_*145 6 centos certificates

CentOS Linux release 7.6.1810 (Core)
Kernel 5.1.11-1.el7.elrepo.x86_64
Run Code Online (Sandbox Code Playgroud)

我把一个证书文件 /etc/pki/ca-trust/source/anchors

文件看起来像这样:

-----BEGIN CERTIFICATE-----
MIIDojCCAoqgAwIBAgIQeqkpty5ghoxP8YfCRe+7qjANBgkqhkiG9w0BAQUFADBP
some strings
FnpKVwAq6UcYOu4AoXweaqOOMsLNSw==
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

update-ca-trust extract我希望在捆绑文件中看到我的证书/etc/pki/tls/certs/ca-bundle.crt但其中没有任何新内容之后。并ls -al告诉我最新的编辑时间,所以它是在 2 个月前更改的,而不是现在。

最初我用.crt文件尝试这个。但是重命名.crt.pem并没有解决我的问题。我也试过update-ca-trust enableupdate-ca-trust force-enable提取物之前,但它并没有帮助。 /var/log/messages对此只字未提。

我的外壳会做什么来修复它?

Yur*_*uri 6

TL; 博士

update-ca-trust您的证书文件将无法提取到ca-bundle.crt,除非这个成功:

openssl x509 -noout -text -in <cert_file> | grep --after-context=2 "X509v3 Basic Constraints" | grep "CA:TRUE"
Run Code Online (Sandbox Code Playgroud)

我在这个问题上花了几个小时。它的根在一个名为Basic Constraints的 X.509 扩展中,用于标记证书是否属于 CA。

我不起眼的发现:

  1. update-ca-bundle工具实际上是一个 shell 脚本,因此很容易窥视其内部
  2. 该脚本p11-kit每次使用不同的过滤器并创建不同的包文件多次调用实用程序。
  3. 该文件ca-bundle.crt实际上tls-ca-bundle.pemp11-kit使用ca-anchors过滤器生成的文件的链接。因此它会忽略除“CA 证书”之外的所有证书。
  4. 证书是否为 CA 由基本约束X.509 扩展决定。这样就可以将证书标记为 CA 的一部分。
  5. 可以使用列出所有 X.509 扩展名 openssl x509 -noout -text -in <cert_file>
  6. 因此,任何未标记为 CA 一部分的证书文件都将被过滤掉,p11-kit并且不会导出到所需ca-bundle.crt文件。

请随时在评论中更正此问题。