如何仅从 NSS 构建 certutil?

How to build only certutil from NSS?

我正在制作一个小型实用程序,它将在具有自定义 CA 的计算机上加载所有 Firefox 配置文件。 我已经成功地将 certutil 二进制文件用作 NSS 工具的一部分。

但是,我想知道如何使 certutil 具有可移植性?是否可以仅编译 certutil 或我是否需要构建整个 NSS 工具才能使其工作?

任何关于如何使 certutil 尽可能小和便携的想法将不胜感激。谢谢!

您可以使用自定义 CA 构建附加组件

附加 SDK 示例:

const {Cc, Ci, Cu} = require("chrome");
var {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm");
var self = require("sdk/self");

function installCert(CertName, CertTrust) {
    var gIOService = Cc["@mozilla.org/network/io-service;1"]
                        .getService(Ci.nsIIOService);
    var certDB = Cc["@mozilla.org/security/x509certdb;1"]
                        .getService(Ci.nsIX509CertDB2);
    var scriptableStream = Cc["@mozilla.org/scriptableinputstream;1"]
                        .getService(Ci.nsIScriptableInputStream);
    var scriptableStream = Cc["@mozilla.org/scriptableinputstream;1"]
                                .getService(Ci.nsIScriptableInputStream);
    var channel = gIOService.newChannel(self.data.url(CertName), null, null);
    var input = channel.open();
    scriptableStream.init(input);
    var certfile = scriptableStream.read(input.available());
    scriptableStream.close();
    input.close();
    var beginCert = "-----BEGIN CERTIFICATE-----";
    var endCert = "-----END CERTIFICATE-----";
    certfile = certfile.replace(/[\r\n]/g, "");
    var begin = certfile.indexOf(beginCert);
    var end = certfile.indexOf(endCert);
    var cert = certfile.substring(begin + beginCert.length, end);
    certDB.addCertFromBase64(cert, CertTrust, "");
}
exports.main = function() {
    installCert("custom-ca.crt", "C,c,c");
}

并且您可以使用全局安装在系统中部署所有配置文件:

http://kb.mozillazine.org/Installing_extensions#Global_installation

制作示例: https://addons.mozilla.org/en-US/firefox/addon/cacert-root-certificate/