当前位置: 首页>>技术教程>>正文


如何使Ubuntu非交互地信任新的根证书?

, ,

问题描述

创建新的certificate authority,手动将CA链导入浏览器并验证浏览器可以信任通过中介签名的新证书后,我们将CA证书链(pem和crt格式化)复制到以下目录的Ubuntu服务器中:

  • /etc /ssl /certificates /

  • /usr /local /share /ca-certificates /

但是,一旦完成此操作,Ubuntu机器上的应用程序(例如wget /curl /java)仍然不信任使用新证书的连接。根据another post,我们需要在具有证书的每台计算机上运行dpkg-reconfigure -f noninteractive ca-certificatesupdate-ca-certificates。这些命令不仅不起作用,而且在数千台服务器上运行它们也是不切实际的。我们使用CFEngine进行配置管理,但是据我所知,它似乎没有针对这种情况的工具。

有没有一种方法可以使Ubuntu脚本化,从而以可以对数千台计算机起作用的方式非交互地更新受信任的CA证书?

最佳回答

我同意BillThor提到的所有内容,但是我要补充一点,可能有必要完全重建证书存储,因为有时update-ca-certificates似乎太努力以致于无法懒惰,并且实际上并没有更新它应该更新的内容。

rm -f /usr/local/share/ca-certificates/certificate.crt
# --fresh is needed to remove symlinks to no-longer-present certificates
update-ca-certificates --fresh

另外,请注意,一旦update-ca-certificates完成,它就应该将/etc/ssl/certs/*.pem文件符号链接到其在/usr/local/share/ca-certificates//usr/share/ca-certificates/中的相应证书。正如BillThor所提到的,还将有一个以指纹为名称的文件符号链接-类似于349f2832.0

ls -l可以确认这一点:

--snip--
lrwxrwxrwx 1 root root     72 Feb  6  2014 Security_Communication_EV_RootCA1.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_EV_RootCA1.crt
lrwxrwxrwx 1 root root     69 Mar 25  2014 Security_Communication_RootCA2.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt
lrwxrwxrwx 1 root root     69 Feb  6  2014 Security_Communication_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_Root_CA.crt
lrwxrwxrwx 1 root root     61 Feb  6  2014 Sonera_Class_1_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Sonera_Class_1_Root_CA.crt
--snip--

另请注意,*。crt和* .pem是同一文件。这意味着放置的原始.crt应该为.pem格式。

.pem格式的文件如下所示:

-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
--snip--
IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
O+7ETPTsJ3xCwnR8gooJybQDJbw=
-----END CERTIFICATE-----

您可以通过对证书运行opensl来测试证书的安装:openssl x509 -in /etc/ssl/certs/[certname].pem -noout -textopenssl x509 -in /usr/local/share/ca-certificates/[certname].pem -noout -text(当然替换为[certname])

您应该看到有关证书的一些详细信息,并且两者都应该匹配(因为使用符号链接,它们应该是同一文件)。

如果它们不匹配,那么您应该re-run update-ca-certificates --fresh

如果他们根本不输出有用的信息,那么您需要检查您的证书并确保其为有效的PEM格式。

编辑:BillThor提到这不适用于Java,但似乎至少在debian上,update-ca-certificates工具也使Java的证书存储保持最新。除了可能运行Wine的Adobe Air之外,我不知道Linux上使用替代证书存储的其他功能。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11678.html,未经允许,请勿转载。