Mikealのリクエスト( https://github.com/mikeal/request )を使用して、サーバーへのhttpsリクエストを作成しています。ただし、CERT_HAS_EXPIREDの認証エラーが引き続き発生します。
request({
url: 'https://www.domain.com/api/endpoint',
strictSSL: false
}, function(error, response, body) {
if(!error && response.statusCode == 200) {
res.json(JSON.parse(body));
} else {
res.json(response.statusCode, {'error': 'error'})
}
});
StrictSSLをtrueとfalseに設定しようとしましたが、どちらもCERT_HAS_EXPIREDと同じエラーを出力しました。この問題の原因は何ですか?また、nodejsで修正する方法はありますか?
これをファイルの先頭に追加します。
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
[〜#〜] dangerous [〜#〜]これは、node.js環境全体でHTTPS/SSL/TLSチェックを無効にします。以下のhttpsエージェントを使用したソリューションをご覧ください。
証明書を更新します。これは、Let's Encrypt™v2を介して証明書を発行する Greenlock を使用して無料で実行できます。
'use strict';
var request = require('request');
var agentOptions;
var agent;
agentOptions = {
Host: 'www.example.com'
, port: '443'
, path: '/'
, rejectUnauthorized: false
};
agent = new https.Agent(agentOptions);
request({
url: "https://www.example.com/api/endpoint"
, method: 'GET'
, agent: agent
}, function (err, resp, body) {
// ...
});
agent
でrejectUnauthorized
を使用すると、ノード全体を完全に処理するのではなく、少なくとも1つのサイトを処理するリクエストにセキュリティの脆弱性を制限することになります。
自己署名証明書を使用している場合、このオプションを追加します。
agentOptions.ca = [ selfSignedRootCaPemCrtBuffer ];
信頼できるピア接続の場合、次の2つのオプションも追加します。
agentOptions.key = clientPemKeyBuffer;
agentOptions.cert = clientPemCrtSignedBySelfSignedRootCaBuffer;
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
も文書化されています。デバッグにのみ使用する必要があり、野生で実行されるような種類のコードにはしないでください。 https
の上で実行されるほぼすべてのライブラリには、エージェントオプションを渡す方法があります。修正すべきでないもの。
CoolAJ86によって提案された「安全性が低い」方法を実現するためのより簡潔な方法を次に示します。
request({
url: url,
agentOptions: {
rejectUnauthorized: false
}
}, function (err, resp, body) {
// ...
});
_strictSSL: false
_は動作するはずです(2013年であっても動作するはずでした)。つまり、次の3つの方法があります。
request
オブジェクトのデフォルト設定を変更します。const myRequest = require('request').defaults({strictSSL: false})
node-request
_を内部的に使用する多くのモジュールでは、request
- objectを挿入することもできるため、変更したインスタンスを使用することができます。NODE_TLS_REJECT_UNAUTHORIZED=0
_を設定することによるエージェント接続。Request.jsを一時的に変更し、あらゆる場所でharcodeをリジェクトしますrejectUnauthorized = trueですが、証明書を長期的なソリューションとして拡張する方が良いでしょう。