自己署名SSL証明書を使用してhttpsサイトをセットアップし、リクエストパッケージを使用してこのサイトのコンテンツにアクセスしています。しかし、プログラムが動かなくなったようで、サイトのコンテンツを印刷していません。この問題を克服する方法はありますか?
質問する
342 次
1 に答える
2
警告: これはデバッグにのみ使用してください。間違った SSL 証明書のオーバーライドを自動的に追加すると、接続全体が危険にさらされます。そうすると、最初から SSL の使用をスキップできます。この拡張機能を他の人に公開するときは、有効な証明書を使用する必要があります。
おそらく、証明書の上書きを手動で追加する必要があります。それはあなたが使うものですnsICertOverrideService.rememberValidityOverride()
(クロム権限が必要です)。唯一の問題は、オーバーライドを追加する証明書を取得することです。ただし、サーバーに接続しようとしてから呼び出し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 に答える