2012-05-29 35 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

相關問題