我使用自签名的ssl证书来设置https站点并使用请求包访问此站点上的内容。然而,该程序似乎陷入困境,并没有打印该网站的内容。有没有办法克服这个问题。
答案 0 :(得分:2)
警告:这只应用于调试。自动为错误的SSL证书添加覆盖会破坏整个连接 - 如果您这样做,那么您可以首先跳过使用SSL。当您为其他人发布此扩展程序时,您应该使用有效的证书。
您可能希望手动添加证书覆盖。您可以使用nsICertOverrideService.rememberValidityOverride()
作为(chrome authority required)的内容。唯一的问题是获取要为其添加覆盖的证书。但是,尝试联系服务器并调用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
检测连接错误是否真的有效(我的猜测是如果出现连接错误但文档没有说什么,它应该抛出。