web-dev-qa-db-ja.com

nodejs-証明書チェーンのエラー自己署名証明書

クライアント側のhttpsリクエストで問題が発生しています。

スニペットは次のようになります。

var fs = require('fs');
var https = require('https');

var options = {
    hostname: 'someHostName.com',
    port: 443,
    path: '/path',
    method: 'GET',
    key: fs.readFileSync('key.key'),
    cert: fs.readFileSync('certificate.crt')
}

var requestGet = https.request(options, function(res){
    console.log('resObj', res);
}

エラー:証明書チェーン内の自己署名証明書です。

Postmanを使用すると、クライアント証明書とキーをインポートして問題なく使用できます。利用可能なソリューションはありますか?また、郵便配達員がどのように証明書を処理し、機能するかについてのいくつかのライトを与えたいと思います。

9
kDoyle

あなたの質問から、SSL通信に自己署名証明書を使用しているため、開発中にこれを行っていると推測しています。

その場合は、NODE_TLS_REJECT_UNAUTHORIZED='0'を環境変数としてノードを実行している場所に追加します。

これはNode信頼できない証明書を許可するように指示します(信頼できない=認証局によって検証されません)

本番環境でこの環境変数を設定することはお勧めしません。 letsencrypt.orgなどの信頼できるプロバイダーの無料のSSL証明書を使用します

23
Peter Grainger

コマンドを書くことができますnpm config set strict-ssl = false

9

検証をオフにするのは非常に危険です。証明書を検証する方がはるかに優れています。

次のように、オプションオブジェクトのcaキーを使用して、認証局の証明書を要求にプルできます。

let opts = {
    method: 'GET',
    hostname: "localhost",
    port: listener.address().port,
    path: '/',
    ca: await fs.promises.readFile("cacert.pem")
  };

https.request(opts, (response) => { }).end();

SSLテストの作成方法を確認できるように、このデモ全体を作成しました。

こちら です。

5
nic ferrier