如何制作Firefox信任系统CA证书?


29

我们的网络管理员最近在防火墙/路由器上启用了HTTPS检查。对于IE用户,这很好,因为所有证书都已通过Active Directory为加入域的计算机分发。但是,我们有许多Firefox用户现在实际上在每个HTTPS站点上引发证书错误。

Firefox使用自己的CA商店,他们也为此感到自豪。默认情况下,有什么方法可以使Firefox信任系统证书存储吗?我看到很多关于如何在Linux中执行此操作的文章,但对于Windows没有任何内容。

我从这篇文章中怀疑是不可能的,但是那篇文章已经有4年历史了。

Answers:


46

从Firefox 49开始,自Firefox 52开始,对Windows CA证书和Active Directory提供的企业根证书提供了一些支持。从版本63开始,macOS还支持从钥匙串中读取证书。

从Firefox 68开始,ESR(企业版)默认启用此功能,但(标准)快速发行版未启用。

您可以about:config通过创建以下布尔值来为Windows和macOS启用此功能:

security.enterprise_roots.enabled

并将其设置为true

对于GNU / Linux,这通常由p11-kit-trust管理,不需要标记。

在整个范围内部署配置系统

自Firefox 64起,有一种使用策略的新推荐方法,该方法记录在https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox

对于旧版本,可以从Windows注册表中检索Firefox安装文件夹,然后转到defaults\pref\子目录并使用以下命令创建一个新文件:

/* Allows Firefox reading Windows certificates */    
pref("security.enterprise_roots.enabled", true);

使用.js扩展名保存它,例如,trustwincerts.js然后重新启动Firefox。该条目将显示在about:config所有用户中。

在整个系统范围内部署Windows证书

在从49到51的Firefox中,它仅支持“根”存储。从Firefox 52开始,它支持其他商店,包括通过AD从域中添加的商店。

这有点超出范围,但说明了哪个是Firefox支持的唯一证书存储,版本49到51或仅用于本地测试。因为这是为所有本地计算机用户部署的,所以它需要在CMD / PowerShell窗口或您自己的自动部署脚本中具有管理员特权。

certutil -addstore Root path\to\cafile.pem

如果您喜欢使用鼠标方式(如何:使用MMC管理单元查看证书),也可以从管理控制台中单击许多窗口来完成此操作。


您知道要将证书加载到哪个证书存储中才能起作用吗?
ETL 2016年

@ETL我仅使用本地计算机系统信任库进行了测试,这很好,因为它适用于所有计算机帐户。根据另一个答复中提到的Mozilla Wiki页面,他们希望在Firefox 52中完成对完整证书的支持(包括AD证书)。默认情况下,certmgr.msc显示用户certstore,但是您需要将其添加到本地计算机certstore中。您还可以使用Windows certutil(不要与Mozilla的NSS certutil混淆)来部署它。

精氨酸 我已经准备好了证书(我正在使用组策略将它们添加到本地计算机的受信任的根证书颁发机构)。我打开了Firefox选项,但FF 50.1仍未使用该证书。那是您的证书吗?
ETL 2016年

2
清单为:1:Firefox不在“高级”->“证书”中列出Windows证书,但无论如何应以受信任的方式工作。2:必须使用该CA创建服务器证书,将CA直接用作服务器证书将不起作用。3:服务器证书必须正确生成,并继承主题备用名称的CA策略。4:如果certstore错误,请尝试使用Microsoft的certutil,我这样做:在Administrator cmd窗口中:(certutil -addstore Root path\to\cafile.pem或.crt)

1
Mozilla Wiki中也提到了这一点。
富兰克林·于

2

您是否考虑过将这些证书部署到Firefox以及Windows证书存储中?

https://wiki.mozilla.org/CA:AddRootToFirefox详细介绍了一些选项:

  1. 直接使用修改证书数据库certutil
  2. 通过在二进制文件旁边放置一个javascript文件,使用Firefox的自动配置功能添加证书:

    var certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB);
    var certdb2 = certdb;
    try {
        certdb2 = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB2);
    } catch (e) {}
    cert = "MIIHPT...zTMVD"; // This should be the certificate content with no line breaks at all.
    certdb2.addCertFromBase64(cert, "C,C,C", "");
    
  3. 直接分发证书数据库文件。
  4. 打包Firefox以进行安装,包括发行版中的证书。
  5. 使用CCK2创建添加证书的扩展。

1

没有一种强制使用系统存储的好方法,但是有一个不错的解决方法(强制使用自定义的Firefox兼容存储)。

以下脚本部分在登录/注销时效果很好。

Stop-Process -processname firefox

$DBPath="\\yourserver\yourshare\cert8.db"
$FirefoxProfiles=Get-ChildItem $Env:appdata\Mozilla\Firefox\Profiles     
$DB=Get-Item $DBPath    
ForEach ( $Profile in $FirefoxProfiles )
{
    $FullPath=join-path $Env:appdata\Mozilla\Firefox\Profiles $Profile
    Copy-Item $DB $FullPath
    $FullPath
}

您甚至可以扩展这种想法,从Windows存储区中获取当前受信任证书的列表,并使用wfaulk答案中引用的Mozilla certutil即时生成cert8.db文件。
Ryan Bolger 2015年

1

有一个免费项目,可以使用组策略来管理Firefox根证书。您可以从Firefox数据库安装或删除根证书。

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.