是否可以在Firefox中自动导入证书?

时间:2016-05-31 18:30:04

标签: javascript firefox certificate

在Linux上部署Firefox时,可以使用与autoconfig类似的东西自动导入证书吗?

我已经搜索了一下,发现了一些这样的说明,但所有这些都似乎已经过时了。

1 个答案:

答案 0 :(得分:1)

可以在任何支持的平台(包括Linux)上运行相同的程序。

您主要有两种可能性:

使用https://mike.kaply.com/cck2/

这是一个Firefox扩展,您可以使用它来自定义Firefox中的许多内容(包括添加CA证书)。它会生成一个zip文件,您可以在Firefox安装目录之上部署(类似于Linux上的/ usr / lib / firefox)。这可能是最简单的方法。

使用autoconfig

我用它在企业环境中部署CA证书(未使用其他类型的证书进行测试)。它还允许进行您需要的任何自定义。

首先,您需要配置autoconfig文件,有关如何执行此操作,请参阅https://developer.mozilla.org/en-US/Firefox/Enterprise_deployment#Configuration

然后,您需要将证书文件放在defaults / pref子目录中(例如:/ usr / lib / firefox / defaults / pref),将下面的函数放在autoconfig文件中,然后调用它:

// This imports a root certificate into Firefox
// The certificate has to be in defaults/pref directory of Firefox
// Source : http://xulfr.org/forums/read.php?1,8256
function importCert(certFileName) {
    var BEGIN_CERT = "-----BEGIN CERTIFICATE-----";
    var END_CERT = "-----END CERTIFICATE-----";

    var x509certdb = Components.classes["@mozilla.org/security/x509certdb;1"];
    var certDB ;
    try {
        // For Firefox <=32
        certDB = x509certdb.getService(Components.interfaces.nsIX509CertDB2);
    }
    catch (exc) {
        // For Firefox >=33
        certDB = x509certdb.getService(Components.interfaces.nsIX509CertDB);
    }

    var ioService = Components.classes["@mozilla.org/network/io-service;1"]
                            .getService(Components.interfaces.nsIIOService);

    var scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"]
                                    .getService(Components.interfaces.nsIScriptableInputStream);


    // https://developer.mozilla.org/en-US/Add-ons/Code_snippets/File_I_O#Getting_special_files
    Components.utils.import("resource://gre/modules/FileUtils.jsm");  
    var certFile = FileUtils.getFile("PrfDef", [certFileName]);

    // http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html
    var trustFlags = "C,C,C";

    var channel = ioService.newChannelFromURI(ioService.newFileURI(certFile));
    var input = channel.open();
    scriptableStream.init(input);
    var certfile = scriptableStream.read(input.available());
    scriptableStream.close();
    input.close();

    certfile = certfile.replace(/[\r\n]/g, "");
    begin = certfile.indexOf(BEGIN_CERT);
    end = certfile.indexOf(END_CERT);
    cert = certfile.substring(begin + BEGIN_CERT.length, end);

    certDB.addCertFromBase64(cert, trustFlags, "");
}
importCert("myCert.pem");

您的证书必须采用ASCII Base64 X509格式(以----- BEGIN CERTIFICATE -----开头的文本文件)。