21

node.js とこのリクエスト モジュールを使用して、別のサーバーへの HTTP 呼び出しを行っています。

https://github.com/mikeal/request

それはうまくいきます。このコードを変更して、会社の SSL 証明書を使用して SSL 経由で呼び出しを行う必要があります。request モジュールのドキュメントでは、strictSSL オプションについて次のように述べています。

"strictSSL - SSL 証明書が有効であることを要求するには、true に設定します。注: 独自の認証局を使用するには、その CA で作成されたエージェントをオプションとして指定する必要があります。"

これは私がしなければならないことのように聞こえますが、「その ca で作成されたエージェントをオプションとして指定する」というフレーズがわかりません。

1) 「エージェント」とはどういう意味ですか? 2) 「エージェントを指定」するにはどうすればよいですか? 3) 「その CA をオプションとして」エージェントを作成するにはどうすればよいですか?

コード例は素晴らしいですが、リードは役に立ちます。ありがとう。

4

4 に答える 4

14

これは主にピーター・ライオンズの答えを詳しく説明し、例を示しています。

独自の認証局 (ca)によって署名された証明書を使用して、HTTPS で実行されているドメインを要求していると想定しています。

リクエスト ライブラリを使用する場合、実際に自分でエージェントをインスタンス化する必要はありませんagentOptions。作成中のリクエストに一部を提供するだけで済みます。次に例を示します。

request({
  method: "POST",
  uri: "https://localhost/entries",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    name: "someEntry"
  }),
  agentOptions: {
    ca: fs.readFileSync("certs/ca.cert.pem")
  }
}, function(error, httpResponse, body) {
  //handle response
});

ここで重要なagentOptionsのは、CA の証明書を提供する です。CA によって署名された証明書を使用するすべてのドメインが受け入れられるようになりました。ca CA1が 3 つのドメインD1D2D3に署名したとします。ca をCA1に設定すると、すべてのドメインD1D2D3へのリクエストが許可されます(ただし、別の ca によって署名されたD4は許可されません)。

ポイント"certs/ca.cert.pem"は、署名認証局の証明書である必要があります。

于 2014-10-29T11:40:24.070 に答える
5
  1. 「エージェント」は、ノード標準モジュールからのhttp.Agentのインスタンスを意味しますhttp
  2. ドキュメントは、私が信じているオプションrequestでこのエージェントインスタンスが渡されることを示していますが、私は自分でそれを行ったことがなく、ドキュメントはここで詳細についてまばらです。poolコードのスキミングに基づいて、必要になるかもしれないと思いますoptions.ca
  3. リクエストは直接サポートoptions.ca しているようで、ここで使用していますgetAgent

だから私の推測ではoptions.ca、あなたの会社の認証局の公開鍵である文字列として渡して、そこから要求が正しいことをするかどうかを確認してください。

于 2013-03-06T18:32:56.870 に答える
1

おそらく私は問題を誤解していますが、私の経験では、特別なことをする必要はまったくありませんrequire('https').

これを Google マップ API 呼び出しでテストしたところ、実際にrequire('http')Google が SSL 経由での呼び出しを望んでいると不平を言った場合でも、追加するとsすべてが期待どおりに機能します。

于 2014-12-12T07:34:49.470 に答える