0

自己署名SSL証明書を使用してhttpsサイトをセットアップし、リクエストパッケージを使用してこのサイトのコンテンツにアクセスしています。しかし、プログラムが動かなくなったようで、サイトのコンテンツを印刷していません。この問題を克服する方法はありますか?

4

1 に答える 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 に答える