问题描述
我想在 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 的原因。这是多年来一直要求的事情;请参阅问题 620373 、 449498 和 454036 (可能还有许多其他问题)。
因此,您只剩下两种解决方案:修改每个配置文件,或修改 Firefox 的行为。我知道这不是您要查找的内容,但是没有办法,因为 Firefox 只查看用户的个人资料。
话虽如此,我会选择的解决方案是使用硬链接或符号链接,特别是我会使用硬链接。这个解决方案肯定是最简单的,可能更好,尽管我没有足够的信息来判断。
您要做的基本上是删除每个配置文件的每个 cert8.db
和 key3.db
文件,并将它们替换为指向 “most complete” cert8.db
和 key3.db
的链接。如果使用硬链接,原始的 cert8.db
和 key3.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 它们。