Request: エラー:証明書チェーンの自己署名証明書

作成日 2016年02月05日  ·  14コメント  ·  ソース: request/request

CharlesProxyを使用してサーバーに対するリクエストを分析しようとしています。 サーバーはTSLを使用しているので、クリアなトラフィックを表示できるようにするための従来の偽の証明書があります。

NodeJS / Requestが気に入らないので、スクリプトが実行されず、そのエラーがスローされます。

どうすればこれを回避できますか?

                console.log('Response status: ' + response.statusCode);
                                                          ^
TypeError: Cannot read property 'statusCode' of undefined
    at Request._callback (/xxx:88:59)
    at self.callback (/xxx:199:22)
    at Request.emit (events.js:107:17)
    at Request.onRequestError (/xxx:821:8)
    at ClientRequest.emit (events.js:107:17)
    at TLSSocket.socketErrorListener (_http_client.js:271:9)
    at TLSSocket.emit (events.js:107:17)
    at TLSSocket.<anonymous> (_tls_wrap.js:942:18)
    at TLSSocket.emit (events.js:104:17)
    at TLSSocket._finishInit (_tls_wrap.js:460:8)
Error: Error: self signed certificate in certificate chain
Help (please use Stackoverflow)

最も参考になるコメント

説明してくれてありがとう。 誰かが興味を持った場合に備えて、偽の証明書の問題を回避する方法を見つけました。

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

これで、偽のSSL認証を使用して、クライアントとサーバー間の通信を検査できます。

全てのコメント14件

この場合、 responseは未定義です。
応答を定義する必要はありません。
応答は、実際の応答が到着した場合にのみ定義されます。
そうでない接続エラーがあった場合。

errorが定義されているか、 response.statusCodeが400以上であるかを確認してください。

この使用法をデバッグしたい場合

env NODE_DEBUG="*" node asdf.js

説明してくれてありがとう。 誰かが興味を持った場合に備えて、偽の証明書の問題を回避する方法を見つけました。

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

これで、偽のSSL認証を使用して、クライアントとサーバー間の通信を検査できます。

私のエラーも同様でしたが、今は@nmaxcomに感謝し

エラー:最初の証明書を確認できません
エラー時(ネイティブ)
TLSSocketで。(_tls_wrap.js:929:36)
TLSSocket.emit(events.js:104:17)で
TLSSocket._finishInit(_tls_wrap.js:460:8)で

または、正規のCAによって署名された証明書を暗号化して使用することもできます。
自己署名証明書は今は意味がありません。

request.get({ uri: 'https://mydocker.com/v2/_catalog', rejectUnauthorized: false }

自己署名CAの場合、「rejectUnauthorized = false」を指定できます。
node.jsの623行目と_tls_wrap.jsでrequest.jsを確認してください。

より良い代替案は次のとおりです。
a)ロードバランサーでSSLターミネーションを実行します
b)無料の証明書を使用する

このようにして、すべての環境で単一の構成が可能になります。
展開の信頼性が高くなり、エラーを早期にフィルタリングできます。

許可されていないものはoptions.rejectUnauthorized = false
しかし、 options.agentOptions.rejectUnauthorized = falseはありません

理由がわからない😢

https://github.com/request/request/blob/v2.81.1/request.js#L257 -L259

申し訳ありませんが、コードのみをご覧ください。 strictSSLrejectUnauthorized単なるエイリアスだと思います
それは悪い名前だと言わなければなりません。 rejectUnauthorizedください😭

実行中のコード中にこのエラーが発生する
解析エラー:構文エラー、予期しない 'var'(T_VAR)、146行目のC:xampphtdocsPHPIMAPadminindex.phpのファイルの終わりが必要です

var notifier = require( 'mail-notifier');
var imap = {
ユーザー名: "anandlintas2017"、
パスワード: "xxxxxxxxx"、
ホスト: "imap.gmail.com"、
ポート:993、// imapポート
secure:true //安全な接続を使用する
};

notifier(imap).on( 'mail'、function(mail){console.log(mail);})。start();
?>

自己署名証明書を使用して相互に暗号化された接続が必要な内部サーバーがある場合、rejectUnauthorized = falseを設定することを提案する人は、rejectUnauthorizedをfalseに設定するとエラーが停止しますが、接続はMITM攻撃を受けやすくなります。これはnodejstlsライブラリのバグであり、問​​題が発生していることを確認してください。他の人がどのように知らないのかわかりません。それについて話してください、AM私はここで何かが欠けています! !!!!! 私が間違っている場合は私を訂正してください!

rejectUnauthorized works in options.rejectUnauthorized = false
but not in options.agentOptions.rejectUnauthorized = false

どちらも私にはうまくいきません

request.get({ uri: 'https://s3.amazonaws.com/...',
    rejectUnauthorized: false,
    // strictSSL: false,
    proxy: '127.0.0.1:8080',
    agentOptions: {
        rejectUnauthorized: false,
        // strictSSL: false,
    },
}, (...args) => {
    console.log(args);
    process.exit();
});

PS ssldisableフラグをオンにしてELECTRON内からコードを実行します。

私にとっては、Kasperskyアンチウイルスを無効にすることで問題が解決しました。

https://github.com/request/request/issues/2061#issuecomment-182573171が一般的な質問への回答のようです

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

効果はありません。

このページは役に立ちましたか?
0 / 5 - 0 評価