使用firefox插件访问https站点

时间:2012-05-29 05:36:40

标签: ssl firefox-addon-sdk

我使用自签名的ssl证书来设置https站点并使用请求包访问此站点上的内容。然而,该程序似乎陷入困境,并没有打印该网站的内容。有没有办法克服这个问题。

1 个答案:

答案 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检测连接错误是否真的有效(我的猜测是如果出现连接错误但文档没有说什么,它应该抛出。