在Firefox上在系统范围内添加证书颁发机构


27

我想添加一些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自动启动系统在上调用的脚本/etc/xdg/autostart/)在会话启动时修改用户配置文件,但是我需要一个解决方案作品。现在,我什至无法从命令行在用户配置文件中加载证书!


是否可以编辑默认配置文件(以便在创建新配置文件时添加新添加的证书,而旧配置文件保持不变)?
Andrea Corbellini 2013年

不,大约已有100个配置文件,新的配置文件很少见。
豪尔赫·苏亚雷斯·德里斯,2013年

您无法在Firefox的目录中生成新的配置文件文件夹,然后将其添加到profiles.ini吗?然后,您可以对其进行添加更改,然后将其复制profiles.ini到每个用户目录。
维尔夫,

注意:您可以通过运行来编辑Firefox的配置文件firefox -p-但您必须先关闭Firefox。
2013年

不会,有+100个用户拥有自己的个人资料。他们不会像失去他们的书签,历史记录,密码等
豪尔赫·苏亚雷斯代利斯

Answers:


20

这里的问题是Firefox在查找证书的位置没有“中心”位置。它只是查看当前配置文件。因此,修改/usr/share/ca-certificates目录或其他类似目录不适用于Firefox。这是多年以来一直要求的;看问题620373449498454036(可能还有很多其他的)。

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

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

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

切记调整权限以适合您的需求。最有可能的是,您将需要chmod a+rw使所有人都能添加/删除证书。如果只希望某些用户能够添加/删除证书,则可以创建一个组,将两个数据库分配给该组,然后+w仅向该组授予权限。


是的,和我能想到的一样。对于imo Firefox来说有点可惜。
gertvdijk

但是不会覆盖用户证书吗?用户证书不是存储在这里吗?
豪尔赫·苏亚雷斯·德里斯(JorgeSuárezde Lis),

@JorgeSuárezdeLis:好吧,当您删除该文件时,您将丢失证书。如果这是“覆盖”的意思,那么可以。您应该首先将所有数据库合并为一个,然后继续创建硬链接。
Andrea Corbellini

但是...我不希望一个用户拥有其他用户的个人证书!我现在谈论的是他们的证书,而不是证书颁发机构。
2013年

@JorgeSuárezdeLis:对不起,我不明白:什么是个人证书
Andrea Corbellini

15

最简单的方法是将证书导入到样本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证书

来源:以编程方式将证书安装到Mozilla中


+1,但是如果您对此表示赞同,那么您也许还应该对StackOverflow上的答案进行投票,这是从中得出的。
Tripleee 2014年

4

与流行的看法相反,您可以让Firefox查看系统证书,而不是其自己的硬编码集。

为此,您将需要使用名为p11-kit的软件包。p11-kit提供了的替代品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时刷新其证书数据库(从而使其获取系统证书)。注意:这将删除存储中的所有现有证书,因此,如果有手动添加的自定义证书,则可能要备份该文件夹,然后重新导入它们。


哦,哇,有点可笑,但是+1。您可能需要添加一个dpkg-divert步骤,以避免APT在升级Firefox软件包时再次覆盖文件。
gertvdijk

@wheeler。你知道这是否仍然有效吗?我已经在Ubuntu 18.04上尝试过,执行此操作后,Firefox根本不会加载任何证书。拥有p11-kit 0.23.9-2
凯文·

1

CCK向导Firefox附加组件的功能之一是导入CA证书。我使用此加载项来创建包含公司CA Cert的自定义加载项。然后,我将自定义xpi打包到内部存储库中的.deb中,所有工作站都从该存储库中获取更新。

CCK向导

编辑:为了将Ubuntu的xpi打包,您需要创建一个包含目录/ usr / lib / firefox-addons / extensions / [addon-name @ servername]的软件包,并将xpi的全部内容解压缩到该目录中。例如,如果您将附加组件命名为foobarbaz,并将其设置为要更新的服务器(如果要启用该功能)是intranet.example.com,则目录将为foobarbaz@intranet.example.com。我从不启用自动更新,而是在存储库中更新deb。


与其他方法相比,我更喜欢这种方法,因为它是独立的,并且可以在一处包含大量其他自定义项。作者似乎已将其扩展名从AMO中删除。现在他在这里拥有自己的站点,而最新的xpi在这里
阿米特·奈杜

1

全新安装后,Firefox可以运行。如果cert8.db删除了证书数据库,则会在下次启动Firefox时重新生成。这强烈表明存在系统范围的CA证书默认存储。

Firefox的源代码表明,内置的CA证书实际上已硬编码为firefox可执行文件。它们位于security / nss / lib / ckfw / builtins / certdata.txt中

因此,无法在系统范围内安装证书。当心,修补源代码可能会带来知识产权方面的问题。


1

我正在使用为用户执行此操作的“用户环境虚拟化”(UEV)应用程序,但是您可以使用Windows客户端中的登录脚本来执行此操作。我不会发布所有代码来动态查找%APPDATA%\ Mozilla \ Firefox \%PROFILE%路径,但是当您找到它时,可以使用一些基本命令来导入脚本。我基本上是在阅读Firefox profile.ini文件,以确定Firefox profile / cert8.db的路径。

您可能想看看使用certutil.exe应用程序。 https://developer.mozilla.org/zh-CN/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

您可以为用户运行登录脚本,这些脚本会自动将受信任的证书从中央位置导入系统中所有用户的Firefox。

这是我的证书导入vb脚本的“核心”:

If Instr(strLine,"Path=Profiles/") Then
  arrLine = Split(strLine, "/")
  strProfile = strAppData & "\Mozilla\Firefox\Profiles\" & arrLine(1)
  strCertDB = strProfile & "\cert8.db"

  'Verify the DB exists, if not move to the next entry
  If objFSO.FileExists(strCertDB) Then
    'Run certutil command on this database
    strCertCommand1 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\MYCA_Root.cer"

    strCertCommand2 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYSECONDCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\SecondCA_Root.cer"

    strCertCommand3 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYTHIRDCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\ThirdCA_Root.cer"

    'Run the import commands for this Firefox profile
    objShell.Run("%comspec% /c " & strCertCommand1),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand2),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand3),0,TRUE

1

我发现大多数情况下,默认情况下(如果未进行配置)默认情况下,否则Firefox使用旧版安全数据库(cert8.db,key3.db和secmod.db),这意味着您将需要使用其他命令行将证书注入Firefox使用的正确数据库。(更多来自certutil的人)

因此,如果您的系统使用默认数据库,则命令应如下所示:(dbm)

certutil -A -n "Description Name" -t "CT,C,C" -d dbm:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

否则应该像这样:(sql)

certutil -A -n "Description Name" -t "CT,C,C" -d sql:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

来自man certutil:

-d [prefix]directory
Specify the database directory containing the certificate and key
database files.

certutil supports two types of databases: the legacy security databases
(cert8.db, key3.db, and secmod.db) and new SQLite databases (cert9.db,
key4.db, and pkcs11.txt).

NSS recognizes the following prefixes:

·   sql: requests the newer database

·   dbm: requests the legacy database

If no prefix is specified the default type is retrieved from
NSS_DEFAUL

将我的.pem文件与第一个certutil命令一起使用时有效。我一直在寻找自动执行单用户安装脚本的方法,这可以解决问题。您需要apt-get install libnss3-tools拥有certutil
xificurC '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.