我已经为我的构建服务器生成了一个自签名证书,我想在我的机器上全局信任该证书,因为我自己创建了密钥并且我厌倦了看到警告。
我在 Ubuntu 12.04 上。如何获取证书并在全球范围内信任它,以便浏览器(Google Chrome)、CLI 实用程序(wget、curl)和编程语言(Python、Java 等)信任与https://mysite.com的连接,而无需询问问题?
Dra*_*oan 112
对此的简单回答是,几乎每个应用程序都会以不同的方式处理它。
此外,OpenSSL 和 GNUTLS(用于处理签名证书的最广泛使用的证书处理库)在处理证书方面的行为也不同,这也使问题复杂化。操作系统也利用不同的机制来利用大多数网站使用的“根 CA”。
除此之外,以Debian为例。安装ca-certificates软件包:
apt-get install ca-certificates
Run Code Online (Sandbox Code Playgroud)
然后将不受信任的 CA 证书(用于签署 CSR 的证书)的公共部分复制到 CA 证书目录(以 root 身份):
cp cacert.crt /usr/share/ca-certificates
Run Code Online (Sandbox Code Playgroud)
注意:证书需要有.crt扩展名才能被提取。
并让它重建包含您的证书的目录,以root身份运行:
dpkg-reconfigure ca-certificates
Run Code Online (Sandbox Code Playgroud)
并选择该ask选项,滚动到您的证书,将其标记为包含并选择确定。
大多数浏览器使用自己的 CA 数据库,因此certutil必须使用类似的工具来修改它们的内容(在由libnss3-tools软件包提供的 Debian 上)。例如,使用 Chrome,您可以运行以下内容:
certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "My Homemade CA" -i /path/to/CA/cert.file
Run Code Online (Sandbox Code Playgroud)
Firefox 将允许您浏览磁盘上的证书,将其识别为证书文件,然后允许您将其导入到根 CA 列表中。
大多数其他命令,例如curltake 命令行开关,您可以用来指向您的 CA,
curl --cacert /path/to/CA/cert.file https://...
Run Code Online (Sandbox Code Playgroud)
或完全放弃 SSL 验证
curl --insecure https://...
Run Code Online (Sandbox Code Playgroud)
如果ca-certificates类似的技巧没有针对该特定应用程序对其进行分类,则其余部分将需要单独调查。
小智 83
要在非交互式上下文(例如厨师食谱)中使用,您可以使用以下序列。
sudo cp my.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Run Code Online (Sandbox Code Playgroud)
man update-ca-certificates此方法优于 @Drav 的方法,因为/usr/share/通常保留给 OS / 添加的文件apt-get。
use*_*610 12
在 Fedora 23 上,将 .pem 或 .der 文件添加到/etc/pki/ca-trust/source/anchors/并运行sudo update-ca-trust extract.
有关man update-ca-trust详细信息,例如是使用 /etc 还是 /usr。
小智 8
在centos中:
cp *.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
Run Code Online (Sandbox Code Playgroud)
最近基于 debian 的系统的非交互式方法(18 年 10 月)
将证书添加到主机的商店和激活它以便应用程序真正利用这些证书是有区别的。不一定使用商店中现有的证书(尽管我不得不承认仍然有很多软件包都弄错了)
当您设置一个考虑/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;
Run Code Online (Sandbox Code Playgroud)
现在这里变得令人困惑,因为有一种方法可以通过使用不同的路径来隐式信任证书:
CERT=mycert.crt
cp /mypath/to/$CERT /usr/local/share/ca-certificates/$CERT
update-ca-certificates;
Run Code Online (Sandbox Code Playgroud)