顺藤摸瓜找到 ca-certificates
其实在 CentOS 中,如果基于 Yum 包安装,基于 OpenSSL 库的应用程序和基于 NSS 库的应用程序使用的证书路径是一样的,默认其引用的根证书集合文件都是 /etc/pki/tls/certs/ca-bundle.crt。
什么是集合文件呢,和 Ubuntu 中的 /etc/ssl/certs/ca-certificates.crt 文件一样,ca-bundle.crt 文件包含了所有的 CA 根证书。
通过下列命令查看 OpenSSL 默认引用的根证书集合文件:
$ openssl version -a
OPENSSLDIR: "/etc/pki/tls"
通过下列命令查看 Curl 默认引用的根证书集合文件:
$curl-config --ca
/etc/pki/tls/certs/ca-bundle.crt
现在的关键就是 /etc/pki/tls/certs/ca-bundle.crt 是谁更新的?和 Ubuntu 一样,该文件也是由 ca-certificates 包提供的(但两者的运作模式完全不一样,只是包名相同)。
深究 ca-certificates
运行如下命令了解 ca-certificates 包的详细信息:
$ yum info ca-certificates
关键输出如下:
The Mozilla CA root certificate bundle
这个包是由 Mozilla 官方提供的,可见 CentOS 极力使用 Mozilla 的 NSS 密码学库,才让 Mozilla 如此重视。
可能有的同学很奇怪了,在 CentOS 系统下,Curl 既然使用 NSS 密码学库,为什么不使用 cert9.db 文件呢?其实很多使用 NSS 密码学库的应用程序(除了 Firefox)很少直接使用 cert9.db,转而使用集成的 pem 证书文件 ca-bundle.crt。
如果本机没有安装 ca-certificates,运行下列命令即可:
$ yum install ca-certificates
看看该包安装那些文件,运行下列命令:
$ rpm -ql ca-certificates
最主要的类型文件包括:
(1)/etc/pki/tls/certs/ca-bundle.crt
和 Ubuntu 的 ca-certificates 包不一样,安装的文件只有一个集合文件,每个 CA 机构的根证书没有单独的文件
(2)/usr/bin/update-ca-trust
这个命令行工具的作用接下去讲解。
如何更新 CA 根证书
(1)mk-ca-bundle.pl 动态更新
如果 Mozilla 维护的 CA 根证书列表发生了变化,而 ca-certificates 包的更新可能滞后,那么可以使用 mk-ca-bundle.pl 工具快速更新。
具体命令如下:
$ wget -o /etc/ssl/certs/ca-certificates.crt
$ chmod 0777 mk-ca-bundle.pl
$ ./mk-ca-bundle.pl
$ cp grep ca-bundle.crt /etc/pki/tls/certs/ca-bundle.crt -fr
(2)通过 update-ca-trust 工具更新 Shared System CA Store
相关系列文章:
公众号二维码