Answers:
将PEM格式的证书(其中包含的格式----BEGIN CERTIFICATE----
)复制到文件中/usr/local/share/ca-certificates
,并以.crt
文件扩展名命名。
然后运行sudo update-ca-certificates
。
注意事项:此安装仅影响使用此证书存储的产品。有些产品可能会使用其他证书存储区;如果使用这些产品,则也需要将此CA证书添加到其他证书存储中。(Firefox指令,Chrome指令,Java指令)
您可以通过查找刚刚添加的证书/etc/ssl/certs/ca-certificates.crt
(这只是串联在一起的所有受信任CA的一长列)来验证此方法是否有效。
您也可以通过尝试连接到您知道使用正在安装的CA签名的证书的服务器来使用OpenSSL的s_client。
$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs
CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = admin@whatever.com
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/emailAddress=admin@whatever.com
... snip lots of output ...
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1392837700
Timeout : 300 (sec)
Verify return code: 0 (ok)
首先要查找的是输出顶部附近的证书链。这应将CA显示为颁发者(旁边i:
)。这告诉您服务器正在提供由您要安装的CA签名的证书。
其次,寻找设置为的verify return code
末尾0 (ok)
。
crt
扩展注释,这是为我完成这项工作的秘密,我获得了带有cert
扩展证书,并且对为什么什么都不起作用感到困惑。
s_client
默认情况下不发送SNI,并且服务器可能需要SNI,尤其是当它支持具有不同证书的虚拟主机/站点时;对于这种情况,请添加-servername foo.whatever.com
。或者,如果使用的是Web服务器(的最新版本)curl
或wget
自动执行SNI的服务器。
update-ca-certificates is a program that updates the directory
/etc/ssl/certs to hold SSL certificates and generates certificates.crt,
a concatenated single-file list of certificates.
It reads the file /etc/ca-certificates.conf. Each line gives a pathname
of a CA certificate under /usr/share/ca-certificates that should be
trusted. Lines that begin with "#" are comment lines and thus ignored.
Lines that begin with "!" are deselected, causing the deactivation of
the CA certificate in question.
Furthermore all certificates found below /usr/local/share/ca-
certificates are also included as implicitly trusted.
从以上内容可以推断出,将本地证书文件放入受信任存储区的首选方法是将其放入/usr/local/share/ca-certificates
,然后运行update-ca-certificates
。您无需/etc/ssl/certs
直接触摸。
--fresh
才能使其正常工作。例如update-ca-certificates --fresh
其他答案与update-ca-certificates
从系统证书存储区读取的应用程序正确。对于Chrome和Firefox,以及其他一些可能的证书,必须将证书放在nssdb(Mozilla NSS库的后端)中。
从 https://code.google.com/p/chromium/wiki/LinuxCertManagement:
例如,要信任用于颁发SSL服务器证书的根CA证书,请使用
certutil -d sql:$ HOME / .pki / nssdb -A -t“ C,” -n <证书昵称> -i <证书文件名>
在哪里<certificate nickname>
是任意的,并且<certificate filename>
是您的.pem或.crt文件。
其他有用的参考资料:
certutil
手册页,描述了上面使用的参数:https : //developer.mozilla.org/en-US/docs/NSS_reference/NSS_tools_ : _certutilmkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
基于dwmw2的答案,您实际上可以告诉使用NSS进行证书管理的应用程序使用系统信任库。
libnss3
默认情况下,它附带一组只读的根CA证书(libnssckbi.so
),因此大多数时候您需要自己将其手动添加到位于的本地用户信任存储中$HOME/.pki/nssdb
。p11-kit
提供了一个替代产品,libnssckbi.so
可作为安装在中的系统范围内根证书的适配器/etc/ssl/certs
。
编辑:
libnssckbi.so
外面似乎有更多的版本,而不仅仅是libnss3
。以下是一个脚本,用于查找所有这些脚本,对其进行备份,并用指向p11-kit
以下位置的链接替换它们:
sudo apt-get update && sudo apt-get install -y p11-kit libnss3
find / -type f -name "libnssckbi.so" 2>/dev/null | while read line; do
sudo mv $line ${line}.bak
sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so $line
done
原始说明:
为此,请安装p11-kit
和libnss3
(如果尚未安装):
sudo apt-get update && sudo apt-get install -y p11-kit libnss3
然后备份现有libnssckbi.so
提供libnss3
:
sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak
最后,创建符号链接:
sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
为了确认它是否有效,您可以运行ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
它并显示以下链接:
lrwxrwxrwx 1 root root 49 Apr 9 20:28 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so
现在,如果您使用将该证书添加到CA存储中update-ca-certificates
,则这些证书现在可用于使用NSS(libnss3
)的应用程序,例如Chrome。
如前所述,使用NSS的各种应用程序都有自己的证书存储。就Ubuntu而言,您必须手动certutil
为每个用户为每个应用程序添加CA。
在其他发行版(例如Fedora)中,Just Works™这类事情,您应该针对不自动信任您使用CA安装的所有应用程序提交错误update-ca-trust
。
您也可以在Ubuntu中修复此问题,方法是安装该p11-kit-modules
软件包,然后使用进行符号链接(例如,从到)替换NSS 内置的信任根模块。p11-kit-trust.so
/usr/lib/firefox/libnssckbi.so
/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so
然后,您将获得系统配置的信任根,而不是一些硬编码的信任根。请注意,Ubuntu附带了带有硬编码信任根的libnssckbi.so库的多个不同副本,您必须替换所有这些副本!
cf. https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285
sudo find / -type f -name "libnssckbi.so"
,它发现libnssckbi.so
在三个地方:/usr/lib/thunderbird/
,/usr/lib/firefox/
,和/usr/lib/x86_64-linux-gnu/nss/
。所以您是说我应该libnssckbi.so
将这三个文件夹中的都链接到p11-kit-trust.so
?
/usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so
就像CHARM一样起作用。我能够在/usr/local/share/ca-certificates
,run sudo update-ca-certificates
和PRESTO中添加证书,Chrome开始接受自签名证书。
在这里添加的答案非常愚蠢,但是我花了2个小时来回在linux中使用certutils ...我确定一切都正确:
hutber@hutber-mint /var/www/asos-mvt-framework $ certutil -L -d sql:${HOME}/.pki/nssdb
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
anyproxy CT,,
rootCA CT,,
myasos CT,,
但是,在chrome中,什么都没有起作用。最后,我尝试了一切。
Restarting Chrome
以下是我成功的关键:史蒂文·星期一的建议