我正在使用自签名 ssl 证书来设置 https 站点并使用请求包来访问该站点上的内容。但是,该程序似乎卡住了,并且没有打印该站点的内容。有什么办法可以克服这个问题。
问问题
342 次
1 回答
2
警告:这应该只用于调试。为错误的 SSL 证书自动添加覆盖会危及整个连接 - 如果您这样做,那么您可以首先跳过使用 SSL。当您为其他人发布此扩展时,您应该使用有效的证书。
您可能想要手动添加证书覆盖。这就是您将使用的东西nsICertOverrideService.rememberValidityOverride()
(需要 chrome 权限)。唯一的问题是获取要为其添加覆盖的证书。但是尝试联系服务器并打电话nsIRecentBadCertsService.getRecentBadCert()
应该可以。像这样的东西:
var Request = require("request").Request;
var host = "example.com";
var port = "443";
Request({
url: "https://" + host + ":" + port + "/foo",
onComplete: function(response)
{
var status = null;
try
{
status = response.status;
} catch(e) {}
if (!status)
{
// There was a connection error, probably a bad certificate
var {Cc, Ci} = require("chrome");
var badCerts = Cc["@mozilla.org/security/recentbadcerts;1"]
.getService(Ci.nsIRecentBadCertsService);
var status = badCerts.getRecentBadCert(host + ":" + port);
if (status)
{
var overrideService = Cc["@mozilla.org/security/certoverride;1"]
.getService(Ci.nsICertOverrideService);
overrideService.rememberValidityOverride(host, port, status.serverCert,
Ci.nsICertOverrideService.ERROR_UNTRUSTED, false);
// Override added, now you should re-do the request
...
}
}
}
});
注意:此代码尚未经过测试,特别是我不确定通过检查检测连接错误是否真的有效response.status
(我的猜测是,如果存在连接错误但文档没有说明任何内容,它应该抛出)。
于 2012-05-29T08:13:53.913 回答