我已经为我的构建服务器生成了一个自签名证书,并且我希望在我的计算机上全局信任该证书,因为我自己创建了密钥,并且我厌倦了看到警告。
我使用的是 Ubuntu 12.04。如何获取证书并全局信任它,以便浏览器 (Google Chrome)、CLI 实用程序 (wget、curl) 和编程语言(Python、Java 等)信任连接https://example.com
而不询问问题?
答案1
对此的简单答案是,几乎每个应用程序都会以不同的方式处理它。
此外,OpenSSL 和 GNUTLS(用于处理签名证书的最广泛使用的证书处理库)在处理证书方面的行为不同,这也使问题变得复杂。此外,操作系统还利用不同的机制来利用大多数网站所使用的“根 CA”。
除此之外,以 Debian 为例。安装ca-certificates
包:
apt-get install ca-certificates
然后,将不受信任的 CA 证书的公共部分(用于签署 CSR 的证书)复制到 CA 证书目录(作为根目录):
cp cacert.crt /usr/share/ca-certificates
笔记:证书需要有.crt
延期才能领取。
并让它重建包含您的证书的目录,以 root 身份运行:
dpkg-reconfigure ca-certificates
并选择该ask
选项,滚动到您的证书,将其标记为包含并选择“确定”。
大多数浏览器使用自己的 CA 数据库,因此certutil
必须使用类似的工具来修改其内容(在 Debian 上由软件包提供libnss3-tools
)。例如,使用 Chrome,您可以运行以下内容:
certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "My Homemade CA" -i /path/to/CA/cert.file
Firefox 将允许您浏览到磁盘上的证书,将其识别为证书文件,然后允许您将其导入到根 CA 列表。
大多数其他命令(例如curl
take 命令行开关)可用于指向您的 CA,
curl --cacert /path/to/CA/cert.file https://...
或者完全放弃 SSL 验证
curl --insecure https://...
ca-certificates
如果类似的技巧不能针对特定应用程序进行分类,那么其余的将需要单独调查。
答案2
非交互式方法
要在非交互式环境(例如厨师食谱)中使用,您可以使用以下顺序。
sudo cp my.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
- 已在 debian 5/6 和 Ubuntu 14.04 上测试并运行。
- 有关更多信息,请参阅
man update-ca-certificates
此方法优于 @Drav 的方法,因为/usr/share/
通常为 OS / 添加的文件保留apt-get
。
答案3
软呢帽
在 Fedora 23 上,将 .pem 或 .der 文件添加到/etc/pki/ca-trust/source/anchors/
并运行sudo update-ca-trust extract
。
详细信息请参见man update-ca-trust
参考资料,例如是否使用 /etc 还是 /usr。
阿尔卑斯山
将 .pem 添加到/usr/local/share/ca-certificates/
并运行update-ca-certificates
。
该 Alpine 工具的来源位于https://github.com/alpinelinux/ca-certificates/blob/898ab81b51730dcd175069956d6e792385c9f457/update-ca.c#L18
答案4
非交互式方法(2018 年 10 月)
对于最近的基于 Debian 的系统
将证书添加到主机的存储区和激活它以便应用程序真正利用它们之间存在区别。商店中现有的证书不一定会被使用(尽管我不得不承认仍然有很多软件包出错),
当您设置一个考虑/etc/ca-certificate.conf
并简单地拒绝使用您的证书的软件包时,这可能会变得混乱,尽管它有已添加,没有错误。您需要update-ca-certificates
明确告知(不仅仅是复制而是)通过将证书添加到/etc/ca-certificate.conf
或来激活证书/etc/ca-certificate/update.d
。
CERT=mycert.crt
cp /mypath/to/$CERT /usr/share/ca-certificates/$CERT
# notice the + sign which tells to activate the cert!!!
echo "+$CERT" >/etc/ca-certificates/update.d/activate_my_cert
dpkg-reconfigure ca-certificates;
现在这里变得令人困惑,因为有一种方法可以通过使用不同的路径来隐式信任证书:
CERT=mycert.crt
cp /mypath/to/$CERT /usr/local/share/ca-certificates/$CERT
update-ca-certificates;