我想添加一些 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 界面上出现了一次,但却是空的。
无论如何,这仅适用于用户,我想在系统范围内添加他们。是否有我可以修改的系统范围数据库?如何修改?
如果没有可以修改的系统范围数据库,我可以依靠 X 启动脚本(作为/etc/X11/Xsession.d/
一个脚本,或由 xdg autostart system on 调用的脚本/etc/xdg/autostart/
)在会话启动时修改用户配置文件,但我需要一个有效的解决方案。我现在甚至无法从命令行在用户配置文件上加载证书!
答案1
这里的问题是 Firefox 没有一个“中心”位置来查找证书。它只是查看当前配置文件。这就是为什么修改/usr/share/ca-certificates
或其他类似目录对 Firefox 不起作用的原因。这是多年来一直要求的;请参阅问题620373,449498和454036(可能还有很多其他的)。
因此,您只剩下两种解决方案:要么修改每个配置文件,要么修改 Firefox 的行为。我知道这不是您想要的,但是没有办法,因为 Firefox 只查看用户的配置文件。
话虽如此,我选择的解决方案是使用硬链接或符号链接,具体来说,我会选择硬链接。虽然我没有足够的信息来判断,但这个解决方案肯定是最简单的,也可能是更好的。
您需要做的基本上是删除每个配置文件中的每个cert8.db
和文件,并将其替换为指向“最完整”和key3.db
的链接。如果您使用硬链接,则原始和将与新和难以区分。cert8.db
key3.db
cert8.db
key3.db
记得调整权限以满足您的需求。最有可能的是,您需要这样做,chmod a+rw
以便每个人都能够添加/删除证书。如果您只希望某些用户能够添加/删除证书,您可以创建一个组,将两个数据库分配给该组,并+w
仅向该组授予权限。
答案2
最简单的方法是将证书导入示例 Firefox 配置文件,然后将 cert8.db 复制到您想要配备证书的用户。
首先手动将证书导入到示例用户的 Firefox 配置文件中。然后复制
/home/${USER}/.mozilla/firefox/${randomalphanum}.default/cert8.db
进入用户的 Firefox 配置文件。就是这样。如果您想确保新用户自动获得证书,请复制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。
也可以看看:编程导入 CA 证书
答案3
找到了这个解决方案来在 ubuntu 上向 Firefox 添加证书:
https://github.com/mozilla/policy-templates/#proxy
只需将此文件添加到:
/usr/lib/firefox/distribution/
touch policies.json
在policy.json中添加:
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": true,
"Install": [
"somecert1.crt",
"usr/local/share/ca-certificates/somecert1.crt"
]
}
}
}
安装部分首先是证书的名称,然后是路径。然后重新启动 Firefox。如果不起作用,请尝试重置 Firefox,就好像您之前设置了某些东西,它就会卡住一样。
此方法无需 certutil 即可有效运行。
答案4
Mozilla 表示,从 Firefox 64 开始,可以从 Linux 中的以下系统路径导入自己的“企业 CA”:
/usr/lib/mozilla/certificates
/usr/lib64/mozilla/certificates
这些路径在 Ubuntu 中默认不存在,但可以手动添加。
此外,您必须命名文件中的每个证书/usr/lib/firefox/distribution/policies.json
,以便自动导入:
{
"policies": {
"ImportEnterpriseRoots": true,
"Certificates": {
"Install": [
"example.crt",
"/specific/folder/another-example.crt"
]
}
}
}
在这种情况下,当 Firefox 重新启动时,将在任一指定的默认目录中添加一个名为“example.crt”的证书文件。
正如 Batchen Regev 在他的回答中所展示的,您还可以指向具有绝对路径的文件。 (这样,Linux 上的 .NET core 开发服务器也会添加 localhost 证书)。
参考:
https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox