问题描述
我的工作决定发布自己的certificate authority(CA),以安全地处理我们工作的各个方面,而无需支付证书费用。
-
加密签名电子邮件
-
加密电子邮件内容
-
可以访问基于IRC client-certificate公司的信息。
-
自动撤消前员工的钥匙
他们向我发送了一个.pem
文件,但我不确定如何将其添加到Ubuntu安装中。发送的说明是:“在Mac上的Double-clicking应该安装它。”
我该如何进行?我需要对OpenSSL做些什么来创建.key
,.csr
或.crt
文件吗?
最佳答案
安装CA
将您的证书以PEM格式(其中包含----BEGIN CERTIFICATE----
的格式)复制到/usr/local/share/ca-certificates
中,并以.crt
文件扩展名命名。
然后运行sudo update-ca-certificates
。
注意事项:此安装仅影响使用此证书存储的产品。有些产品可能会使用其他证书存储区;如果您使用这些产品,则也需要将此CA证书添加到其他证书存储中。 (Firefox Instructions,Chrome Instructions,Java Instructions)
测试CA
您可以通过查找刚刚在/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)
。
次佳答案
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库的后端)中。
从https://code.google.com/p/chromium/wiki/LinuxCertManagement:
For example, to trust a root CA certificate for issuing SSL server certificates, use
certutil -d sql:$HOME/.pki/nssdb -A -t “C,,” -n <certificate nickname> -i <certificate filename>
其中<certificate nickname>
是任意的,而<certificate filename>
是您的.pem或.crt文件。
其他有用的参考资料:
-
概述:https://wiki.archlinux.org/index.php/Network_Security_Services
-
certutil
手册页,描述了上面使用的参数:https://developer.mozilla.org/en-US/docs/NSS_reference/NSS_tools_:_certutil
第四种答案
我遇到了同样的问题,必须将.pem
文件复制到/usr/local/share/ca-certificates
,并将其重命名为.crt
。例如,如果您没有.pem
,则可以使用openssl轻松将.cer
文件转换为.pem
。
复制文件后,必须执行sudo update-ca-certificates
。
第五种答案
对于基于Debian的较新版本,您可能需要运行:
sudo dpkg-reconfigure ca-certificates
注意:sudo dpkg-reconfigure ca-certificates在内部调用update-ca-certificates
当然,在执行以下任何操作之前,您仍然需要将证书(.crt文件)复制到/usr /share /ca-certificates:
第六种答案
在dwmw2的answer的基础上,您实际上可以告诉使用NSS进行证书管理的应用程序使用系统信任库。
默认情况下,libnss3
附带一组只读的根CA证书(libnssckbi.so
),因此大多数时候,您需要手动将其自己添加到位于$HOME/.pki/nssdb
的本地用户信任存储中。 p11-kit
提供了libnssckbi.so
的drop-in替代品,可作为/etc/ssl/certs
根证书system-wide的适配器。
编辑:
似乎有更多版本的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
然后备份由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
为了确认它是否有效,您可以运行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
现在,如果您使用update-ca-certificates
将证书添加到CA存储,则这些证书现在可用于使用NSS(libnss3
)的应用程序,例如Chrome。
第七种答案
如上所述,使用NSS的各种应用程序都有自己的证书存储。就Ubuntu而言,您必须手动使用certutil
为每个用户的每个应用程序添加CA。
在其他发行版(如Fedora)中,Just Works™这类事情,您应该针对无法自动信任通过update-ca-trust
安装的CA的所有应用程序提交错误。
您也可以在Ubuntu中解决此问题,方法是安装p11-kit-modules
软件包,然后通过建立从/usr/lib/firefox/libnssckbi.so
到/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so
的符号链接,将NSS 内置信任根模块替换为p11-kit-trust.so
。
然后,您将获得系统配置的信任根,而不是某些hard-coded。请注意,Ubuntu附带hard-coded信任根,提供了该libnssckbi.so库的多个不同副本,您必须替换所有这些副本!
cf. https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285