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
この場合、 response
は未定義です。
応答を定義する必要はありません。
応答は、実際の応答が到着した場合にのみ定義されます。
そうでない接続エラーがあった場合。
error
が定義されているか、 response.statusCode
が400以上であるかを確認してください。
この使用法をデバッグしたい場合
env NODE_DEBUG="*" node asdf.js
説明してくれてありがとう。 誰かが興味を持った場合に備えて、偽の証明書の問題を回避する方法を見つけました。
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
これで、偽のSSL認証を使用して、クライアントとサーバー間の通信を検査できます。
私のエラーも同様でしたが、今は@nmaxcomに感謝し
エラー:最初の証明書を確認できません
エラー時(ネイティブ)
TLSSocketで。
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
申し訳ありませんが、コードのみをご覧ください。 strictSSL
はrejectUnauthorized
単なるエイリアスだと思います
それは悪い名前だと言わなければなりません。 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アンチウイルスを無効にすることで問題が解決しました。
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
効果はありません。
最も参考になるコメント
説明してくれてありがとう。 誰かが興味を持った場合に備えて、偽の証明書の問題を回避する方法を見つけました。
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
これで、偽のSSL認証を使用して、クライアントとサーバー間の通信を検査できます。