如何向 Ubuntu 添加证书颁发机构 (CA)?

Xeo*_*oss 242 certificate ubuntu trusted-root-certificates

我的工作决定颁发他们自己的证书颁发机构(CA) 来安全地处理我们工作的不同方面,而无需支付证书费用。

  • 对电子邮件进行加密签名
  • 加密电子邮件内容
  • 访问诸如基于IRC客户证书的公司之类的内容。
  • 自动撤销前员工的钥匙

他们给我发了一个.pem文件,我不知道如何将它添加到我的 Ubuntu 安装中。发送的说明是:“在 Mac 上双击它应该会安装它。” 

我该如何进行?我需要做的东西OpenSSL的创建.key.csr.crt文件?

Mar*_*ase 322

安装 CA

将 PEM 格式(其中包含的格式----BEGIN CERTIFICATE----)的证书复制到其中/usr/local/share/ca-certificates并使用.crt文件扩展名命名。

然后运行sudo update-ca-certificates

警告:此安装仅影响使用此证书存储的产品。部分产品可能使用其他证书存储;如果您使用这些产品,则还需要将此 CA 证书添加到其他证书存储中。(Firefox 说明Chrome 说明Java 说明

测试 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)
Run Code Online (Sandbox Code Playgroud)

首先要查找的是靠近输出顶部的证书链。这应该将 CA 显示为颁发者(在 旁边i:)。这告诉您服务器正在提供由您正在安装的 CA 签名的证书。

其次,查找verify return code要设置为 的末尾0 (ok)

  • 请注意, update-ca-certificates 可能非常挑剔(可能是设计使然)。mycert.pem.crt 不起作用,但 mycert.crt 起作用了。我还认为它需要是 /usr/local/share/ca-certificates,而不是 /usr/share/ca-certificates(尽管 /etc/ca-certificates.conf 中有评论)。 (7认同)
  • 这个确实有效 (4认同)
  • 一个警告:`s_client` 默认不发送 SNI,服务器可能需要 SNI,特别是如果它支持具有不同证书的虚拟主机/站点;对于这种情况,添加`-servername foo.whatever.com`。或者,如果它是 *web* 服务器,请使用(现代版本)`curl` 或 `wget`,它们会自动执行 SNI。 (3认同)
  • 感谢您注意到 firefox/chrome 不使用默认证书存储。 (2认同)
  • 感谢对 `crt` 扩展的评论,这是为我完成这项工作的秘诀,我获得了带有 `cert` 扩展的证书,并且对为什么没有任何效果感到困惑。 (2认同)

Ste*_*day 84

人更新-ca-证书

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.
Run Code Online (Sandbox Code Playgroud)

从上面的,我推断,以获取本地证书文件到受信任的存储的首选方法是将它们放到/usr/local/share/ca-certificates,然后运行update-ca-certificates。您不需要/etc/ssl/certs直接触摸。

  • 使用 .crt 扩展名命名证书似乎也是必需的。 (30认同)
  • 我必须添加 `--fresh` 才能让它工作。例如`update-ca-certificates --fresh` (7认同)

Joh*_*ann 21

有关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 文件。

其他有用的参考资料:

  • 有一种方法可以让 Chrome 和 Firefox 从系统证书存储中读取。看我的回答:https://superuser.com/a/1312419/506107 (2认同)
  • Firefox 允许您配置安全模块...它与 chrome 默认情况下使用的安全模块不同...您可以通过加载 `/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust 来添加它。 so` 到 Firefox 证书设置下的安全模块列表。一旦你知道就超级简单。 (2认同)

gre*_*uze 16

我有同样的问题,我不得不复制.pem文件/usr/local/share/ca-certificates,重命名它.crt。该.cer文件可以很容易地转换为.pem与OpenSSL的,例如,如果你不具备的.pem

复制文件后,您必须执行sudo update-ca-certificates.


小智 13

对于基于 Debian 的较新版本,您可能需要运行:

sudo dpkg-reconfigure ca-certificates
Run Code Online (Sandbox Code Playgroud)

注意: sudo dpkg-reconfigure ca-certificates 在内部调用 update-ca-certificates

在执行任何操作之前,您当然仍需要将证书(.crt 文件)复制到 /usr/share/ca-certificates :)


whe*_*ler 8

基于 dwmw2 的回答,您实际上可以告诉使用 NSS 进行证书管理的应用程序使用系统信任存储。

libnss3默认情况下,附带一组只读的根 CA 证书 ( libnssckbi.so),因此大多数情况下,您需要自己手动将它们添加到位于$HOME/.pki/nssdb. p11-kit提供了一个替代品,libnssckbi.so它充当安装在/etc/ssl/certs.

编辑:

似乎有更多版本的libnssckbi.soout 不仅仅是 in 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
Run Code Online (Sandbox Code Playgroud)

原始说明:

为此,请安装p11-kitlibnss3(如果尚未安装):

sudo apt-get update && sudo apt-get install -y p11-kit libnss3
Run Code Online (Sandbox Code Playgroud)

然后备份现有libnssckbi.so提供的libnss3

sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak
Run Code Online (Sandbox Code Playgroud)

最后,创建符号链接:

sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
Run Code Online (Sandbox Code Playgroud)

要确认它有效,您可以运行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
Run Code Online (Sandbox Code Playgroud)

现在,如果您使用 将证书添加到 CA 存储update-ca-certificates,这些证书现在可用于使用 NSS ( libnss3) 的应用程序,例如 Chrome。