2012-05-29 41 views
0

我正在使用自签名SSL证书来设置https站点并使用请求包来访问此站点上的内容。然而,该程序似乎卡住了,并没有打印网站的内容。有什么办法可以解决这个问题。使用Firefox附件访问https站点

+0

如果您只是在浏览器中打开它,HTTPS站点是否可以访问而没有警告? –

+0

否显示证书不可信。 – user1179510

+0

那么,这是问题所在。 request包将执行相同的验证。为您的网站添加一个永久性例外,它将起作用。 –

回答

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真正的工作(我的猜测是,它应该抛出,如果有是一个连接错误,但文档没有说什么)。

+0

让我试试看 – user1179510

相关问题