我为内部网络 example.com 创建了一个自定义根证书颁发机构。理想情况下,我希望能够将与此证书颁发机构关联的 CA 证书部署到我的 Linux 客户端(运行 Ubuntu 9.04 和 CentOS 5.3),以便所有应用程序都能自动识别该证书颁发机构(即,我不想手动配置 Firefox、Thunderbird 等来信任此证书颁发机构)。
我已尝试在 Ubuntu 上执行此操作,将 PEM 编码的 CA 证书复制到 /etc/ssl/certs/ 和 /usr/share/ca-certificates/,以及修改 /etc/ca-certificates.conf 并重新运行 update-ca-certificates,但应用程序似乎没有识别出我已向系统添加了另一个受信任的 CA。
因此,是否可以一次性将 CA 证书添加到系统中,还是需要手动将 CA 添加到所有可能尝试与网络中由该 CA 签名的主机建立 SSL 连接的应用程序中?如果可以一次性将 CA 证书添加到系统中,那么需要将其添加到哪里?
谢谢。
答案1
简而言之:你需要单独更新每个应用程序
甚至 Firefox 和 Thunderbird 也不共享证书。
不幸的是,Linux 没有存储/管理 SSL 证书的中心位置。Windows 确实有这样一个地方,但最终你还是会遇到同样的问题(Firefox/Thunderbird 不会使用 Windows 提供的 API 来确定 SSL 证书的有效性)
我会在每个主机上使用类似 puppet/cfengine 的东西,并使用这些工具提供的机制将所需的根证书放在所有客户端上。
答案2
遗憾的是,像 Firefox 和 Thunderbird 这样的程序使用它们自己的数据库。
但是您可以编写一个脚本来查找所有配置文件,然后添加证书。这是添加证书的工具: http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html
您也可以设置一个默认的 cert8.db 文件,这样新的配置文件也会获得它。
对于其他应用程序来说,问题在于它们是否支持中央存储。
答案3
您指定的方法将更新中央 /etc/ssl/certs/ca-certificates.crt。但是,您会发现大多数应用程序未配置为使用此文件。大多数应用程序可以配置为指向中央文件。没有自动方法可以让所有内容使用此文件,而无需重新配置它们。
在 Ubuntu/Debian 中默认使用此文件可能值得提交错误。
答案4
您可以在 ubuntu 和其他发行版中添加自定义 PKI CA:这里有链接,您可能会发现很有价值: Linux 证书管理