我正在制作一个小型实用程序,它将在具有自定义 CA 的机器上加载所有 Firefox 配置文件。我已经成功地将 certutil 二进制文件用作 NSS 工具的一部分。
但是,我想知道如何制作 certutil?是否可以只编译 certutil 或者我需要构建整个 NSS 工具才能使其工作?
任何关于如何使 certutil 尽可能小和便携的想法将不胜感激。谢谢!
我正在制作一个小型实用程序,它将在具有自定义 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/