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


在 Firefox 上添加证书颁发机构 system-wide

,

问题描述

我想在 Ubuntu 上添加一些默认 firefox 没有的根 CA,但我不知道如何。

我尝试使用 certutil 将它们添加到本地证书中,但没有用。它弄乱了我的证书数据库。

$ certutil -A -d .mozilla/firefox/kek3dogy.default/ -i /usr/local/share/ca-certificates/FNMT_ACRAIZ.crt -n "Certificado Raiz FNMT" -t "TCu,Cuw,Tuw"

进而

$ certutil -L -d .mozilla/firefox/kek3dogy.default/

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Go Daddy Secure Certification Authority                      ,,   
VeriSign Class 3 Secure Server CA - G3                       ,,   
VeriSign Class 3 Extended Validation SSL CA                  ,,   
DigiCert High Assurance CA-3                                 ,,   
GlobalSign Domain Validation CA - G2                         ,,   
GeoTrust SSL CA                                              ,,   
StartCom Class 2 Primary Intermediate Server CA              ,,   
Google Internet Authority                                    ,,   
Certificado Raiz FNMT                                        CT,C,c
USERTrust Legacy Secure Server CA                            ,,   
HP Jetdirect 2B0EAD20                                        ,,   
Akamai Subordinate CA 3                                      ,,   
VeriSign, Inc.                                               ,,   
Thawte SGC CA                                                ,,   
VeriSign Class 3 Secure Server CA - G2                       ,,

该证书不会显示在 Firefox 上。我试了几次,甚至删除了配置文件,它在 Firefox 界面上出现过一次,但完全是空的。

无论如何,这只是针对用户的,我想将它们添加到system-wide。有我可以修改的 system-wide 数据库吗?如何?

如果没有我可以修改的 system-wide 数据库,我可以依靠 X 启动脚本(如 /etc/X11/Xsession.d/ 的脚本,或由 xdg 自动启动系统在 /etc/xdg/autostart/ 上调用的脚本)在会话开始时修改用户配置文件,但我需要一个解决方案作品。我现在甚至无法从命令行加载用户配置文件上的证书!

最佳思路

这里的问题是 Firefox 没有查找证书的 ‘central’ 位置。它只是查看当前的配置文件。这就是修改 /usr/share/ca-certificates 或其他类似目录不适用于 Firefox 的原因。这是多年来一直要求的事情;请参阅问题 620373449498454036 (可能还有许多其他问题)。

因此,您只剩下两种解决方案:修改每个配置文件,或修改 Firefox 的行为。我知道这不是您要查找的内容,但是没有办法,因为 Firefox 只查看用户的个人资料。

话虽如此,我会选择的解决方案是使用硬链接或符号链接,特别是我会使用硬链接。这个解决方案肯定是最简单的,可能更好,尽管我没有足够的信息来判断。

您要做的基本上是删除每个配置文件的每个 cert8.dbkey3.db 文件,并将它们替换为指向 “most complete” cert8.dbkey3.db 的链接。如果使用硬链接,原始的 cert8.dbkey3.db 将与新的无法区分。

请记住调整权限以满足您的需要。最有可能的是,您需要 chmod a+rw 以便每个人都能够添加/删除证书。如果您只希望某些用户能够添加/删除证书,您可以创建一个组,将两个数据库分配给该组,并仅向该组授予 +w 权限。

次佳思路

最简单的方法是将证书导入到样例 firefox-profile 中,然后将 cert8.db 复制到您要配备该证书的用户。

首先手动将证书导入sample-user的firefox配置文件中。然后复制

/home/${USER}/.mozilla/firefox/${randomalphanum}.default/cert8.db

进入用户 firefox-profiles。就是这样。如果要确保新用户自动获得证书,请将 cert8.db 复制到:

/etc/firefox-3.0/profile

这是一种不覆盖现有证书的替代方法:[Linux 系统的 bash 片段]

certificateFile="MyCa.cert.pem"
certificateName="MyCA Name" 
for certDB in $(find  ~/.mozilla* ~/.thunderbird -name "cert8.db")
do
  certDir=$(dirname ${certDB});
  #log "mozilla certificate" "install '${certificateName}' in ${certDir}"
 certutil -A -n "${certificateName}" -t "TCu,Cuw,Tuw" -i ${certificateFile} -d ${certDir}
done

您可以在 libnss3-tools 包 (debian/ubuntu) 中找到 certutil。

另见:Programmatic import of CA Certificate

来源:Programmatically Install Certificate into Mozilla

第三种思路

与流行的看法相反,您可以让 Firefox 查看系统证书而不是它自己的 hard-coded 集。

为此,您需要使用名为 p11-kit 的包。 p11-kit 为 libnssckbi.so 提供了 drop-in 替代品,libnssckbi.so 是包含硬编码证书集的共享库。 p11-kit 版本会从系统证书存储中读取证书。

由于 Firefox 附带了自己的 libnssckbi.so 版本,因此您需要对其进行跟踪并替换它,而不是 libnss3 中提供的版本:

sudo mv /usr/lib/firefox/libnssckbi.so /usr/lib/firefox/libnssckbi.so.bak
sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/firefox/libnssckbi.so

接下来,删除 ~/.pki 目录以使 Firefox 在重新启动 Firefox 时刷新其证书数据库(使其拉入系统证书)。注意:这将删除存储中的所有现有证书,因此如果您手动添加了自定义证书,您可能需要备份该文件夹,然后 re-import 它们。

参考资料

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