当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

我的工作决定发布自己的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 InstructionsChrome InstructionsJava 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)

次佳答案

man update-ca-certificates

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

其他有用的参考资料:

第四种答案

我遇到了同样的问题,必须将.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-kitlibnss3(如果尚未安装):

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9341.html,未经允许,请勿转载。