Node.jsとこのリクエストモジュールを使用して、別のサーバーにHTTP呼び出しを行っています。
https://github.com/mikeal/request
それは素晴らしい働きをします。私の会社のSSL証明書を使用して、SSL経由で呼び出しを行うようにこのコードを変更する必要があります。リクエストモジュールのドキュメントでは、strictSSLオプションについて次のように述べています。
「strictSSL-SSL証明書が有効であることを要求するにはtrueに設定します。注:独自の認証局を使用するには、そのcaをオプションとして作成されたエージェントを指定する必要があります。」
これは私がする必要があるように聞こえますが、「そのcaをオプションとして使用して作成されたエージェントを指定してください。」というフレーズがわかりません。
1)「エージェント」とはどういう意味ですか? 2)「エージェントを指定する」方法3)「そのcaをオプションとして使用して」エージェントを作成する方法を教えてください。
コード例はすばらしいでしょうが、どんなリードも役に立ちます。ありがとう。
これは主に Peter Lyonsの回答 について詳しく説明し、例を示します。
your認証局(ca)によって署名された証明書を使用して、HTTPSで実行されているドメインをリクエストしていると想定しています。
request library を使用する場合は、実際にエージェントをインスタンス化する必要はありません。作成するリクエストに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
});
ここで重要なのは、CAの証明書を提供するagentOptions
です。 caによって署名された証明書を使用するすべてのドメインが受け入れられます。 ca CA1が3つのドメインD1、D2、Dに署名したと想像してください。 caをCA1に設定すると、すべてのドメインへのリクエストが許可されますD1、D2、D(ただし、 D4別のCAによって署名されています)。
ポイントは:"certs/ca.cert.pem"
は、署名認証局の証明書でなければなりません。
http
モジュールの http.Agent のインスタンスを意味しますrequest
オプションのpool
に渡されることを示しています。コードのスキミングに基づいて、私はあなたがoptions.ca
options.ca
および ここで使用 in getAgent
だから私の推測はおそらくoptions.ca
は、会社の認証局の公開鍵である文字列として、リクエストがそこから正しいことを行うかどうかを確認します。
const request = require('request');
request.post({
url: strRSAUrl,
agentOptions: {
ca: fs.readFileSync('path-to-cacert.pem')
},
form: {
some_key: some_value,
}
}, function (error, response, body) {
objResponse.send(body);
});
詳しくは nodejs#request
私は同じ問題に遭遇し、周囲を掘り下げました、そして最後に私はこのテストケースが私たちが必要とするものの最良の例であることがわかりました:
おそらく私は問題を誤解しているかもしれませんが、私の経験では、あなたがrequire('https')
であれば、何も特別なことをする必要はなく、呼び出しは自動的にSSL経由で行われます。
私はこれを私のgoogle maps api呼び出しでテストし、実際にrequire('http')
GoogleがSSL経由で呼び出しを受信することを望んでいると不平を言っていますが、s
を追加するとすべてが期待どおりに機能します。