我的工作已经决定发行自己的证书机构(CA)来安全地处理我们工作的不同方面,而不需要支付证书费用。
我该怎么做?我需要用OpenSSL来创建一个.pem
、.key
或.csr
文件吗?
将您的证书以 PEM 格式(其中有 ----BEGIN CERTIFICATE----
的格式)复制到 /usr/local/share/ca-certificates
中,并将其命名为 .crt
文件扩展名。某些產品可能會使用其他證書庫;如果你使用這些產品,你需要將此 CA 證書也加入到其他證書庫中。 Firefox Instructions , Chrome Instructions , Java Instructions )
你可以通过在 sudo update-ca-certificates
中查找刚刚添加的证书来验证是否成功(这是一个长长的列表,将所有可信的 CA 的所有证书串联在一起)。你也可以使用OpenSSL的s_client,尝试连接到一个你知道的服务器上,而这个服务器上的证书是由你刚刚安装的CA签署的。这应该显示的是CA作为发证者(/etc/ssl/certs/ca-certificates.crt
旁边)。
其次,寻找最后的i:
设置为verify return code
。
update-ca-certificates is a program that updates the directory /etc/ssl/certs to hold SSL
certificates and generates ca-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. Certificates must have a .crt
extension in order to be included by update-ca-certificates.
Furthermore all certificates with a .crt extension found below /usr/local/share/ca-
certificates are also included as implicitly trusted.
从上面的内容来看,我推断出要把本地的证书文件放到可信存储中,首选的方法是把它们放到/usr/local/share/ca-certificates
中,然后运行update-ca-certificates
。你不需要直接接触/etc/ssl/certs
。
其他关于update-ca-certificates
的答案对于从系统证书库中读取的应用程序是正确的。对于Chrome和Firefox,可能还有其他一些应用,证书必须放在nssdb中,也就是Mozilla NSS库的后台。 pki/nssdb -A -t “C,,,” -n <证书昵称> -i <证书文件名>
其中<certificate nickname>
是任意的,<certificate filename>
是你的.pem或.crt文件。https://wiki.archlinux.org/index.php/Network_Security\Security\Services
- certutil
man page,描述了上面使用的参数。https://developer.mozilla.org/en-US/docs/NSS_reference/NSS\tools:_certutil
在dwmww2的答案的基础上,你实际上可以告诉使用NSS进行证书管理的应用程序使用系统信任商店。
libnss3
默认情况下,
libnssckbi.so
附带了一组只读的根CA证书($HOME/.pki/nssdb
),所以大多数时候你需要自己手动添加到位于p11-kit
中的本地用户信任商店中。libnssckbi.so
提供了一个可替代/etc/ssl/certs
的即插即用的替代方案,它作为一个适配器,可替代安装在libnssckbi.so
中的全系统根证书。下面是一个脚本来找到它们,将它们全部备份,并将它们替换成libnss3
的链接:
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
和p11-kit
(如果还没有安装的话):
sudo apt-get update && sudo apt-get install -y p11-kit libnss3
然后备份现有的libnss3
提供的libnssckbi.so
。最后,创建符号链接:
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
最后,创建符号链接:
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
确认成功后,你可以运行libnss3
,它应该会显示出链接:
&001
现在,如果你使用ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
将证书添加到CA存储中,这些证书将可以使用NSS(update-ca-certificates
)的应用程序,如Chrome浏览器。
如前所述,各种使用NSS的应用程序都有自己的证书库。在Ubuntu上,你必须手动使用certutil
来为每个应用程序、每个用户添加CA。
在其他发行版如Fedora上,这种事情只需用update-ca-trust
就可以了,你应该对任何不能自动信任p11-kit-modules
安装的CA的应用程序提出bug。在Ubuntu中,你也可以通过安装p11-kit-trust.so
包,然后用/usr/lib/firefox/libnssckbi.so
替换NSS built-in trust roots模块来解决这个问题,例如,从/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so
到
,然后你就会得到系统配置的信任根,而不是一些硬编码的信任根。请注意,Ubuntu 提供了多个不同的 libnssckbi.so 库的different副本,而你必须替换所有的信任根!
参见 https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285
我在这里补充了一个非常愚蠢的答案,但我花了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
是我成功的关键。Steven Monday](https://superuser.com/questions/437330/how-do-you-add-a-certificate-authority-ca-to-ubuntu#437377)的建议