Saya mencoba menganalisis permintaan saya terhadap server menggunakan Charles Proxy. Server menggunakan TSL jadi saya memiliki sertifikat palsu klasik untuk dapat melihat lalu lintas yang jelas.
NodeJS / Request tidak menyukainya, jadi skrip saya tidak berjalan dan memunculkan kesalahan itu.
Bagaimana saya bisa melewati ini?
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
dalam hal ini response
tidak terdefinisi.
respon tidak harus didefinisikan.
respons hanya akan ditentukan jika respons aktual tiba.
jika ada beberapa kesalahan koneksi yang tidak terjadi.
periksa error
untuk didefinisikan, atau response.statusCode
lebih besar atau sama dengan 400.
jika Anda ingin men-debug gunakan ini
env NODE_DEBUG="*" node asdf.js
Terima kasih atas penjelasannya. Saya menemukan cara menghindari masalah dengan sertifikat palsu jika ada yang tertarik:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Dengan itu saya dapat menggunakan otentikasi SSL palsu untuk memeriksa komunikasi antara klien saya dan server.
Kesalahan saya serupa tetapi sekarang saya baik-baik saja, terima kasih @nmaxcom
Kesalahan: tidak dapat memverifikasi sertifikat pertama
di Kesalahan (asli)
di TLSSocket.
di TLSSocket.emit (events.js:104:17)
di TLSSocket._finishInit (_tls_wrap.js:460:8)
atau Anda bisa menggunakan mari mengenkripsi, sertifikat yang ditandatangani oleh CA yang sah.
sertifikat yang ditandatangani sendiri tidak masuk akal sekarang.
request.get({
uri: 'https://mydocker.com/v2/_catalog',
rejectUnauthorized: false
}
Untuk CA yang ditandatangani sendiri, kita dapat menentukan 'rejectUnauthorized = false'.
Periksa request.js di baris 623 & _tls_wrap.js di node.js.
Alternatif yang lebih baik adalah:
a) Lakukan penghentian SSL di penyeimbang beban Anda
b) Gunakan sertifikat gratis
Dengan cara ini Anda memiliki satu konfigurasi di semua lingkungan Anda.
Anda akan memiliki kepercayaan diri yang lebih tinggi pada penerapan Anda dan memfilter kesalahan lebih awal.
tolak Karya tidak sah di options.rejectUnauthorized = false
tapi tidak di options.agentOptions.rejectUnauthorized = false
gak tau kenapa
https://github.com/request/request/blob/v2.81.1/request.js#L257 -L259
Maaf, hanya melihat kode. Saya mengerti bahwa strictSSL
hanyalah sebuah alias untuk rejectUnauthorized
Harus mengatakan itu nama yang buruk, gunakan saja rejectUnauthorized
mendapatkan kesalahan ini saat menjalankan kode
Kesalahan penguraian: kesalahan sintaks, 'var' (T_VAR) yang tidak terduga), mengharapkan akhir file di C:xampphtdocsPHPIMAPadminindex.php pada baris 146
var notifier = membutuhkan('pemberitahu surat');
var gambar = {
nama pengguna: "anandlintas2017",
kata sandi: "xxxxxxxxx",
host: "imap.gmail.com",
port: 993, // port imap
aman: benar // gunakan koneksi aman
};
notifier(imap).on('mail',fungsi(mail){console.log(mail);}).start();
?>
untuk orang-orang yang menyarankan untuk mengatur rejectUnauthorized=false bagaimana jika saya memiliki server internal yang seharusnya memiliki koneksi terenkripsi satu sama lain dengan beberapa sertifikat yang ditandatangani sendiri, pengaturan iguess rejectUnauthorized ke false akan menghentikan kesalahan tetapi koneksi saya 100% rentan terhadap serangan MITM, saya lihat bahwa ini adalah bug di perpustakaan nodejs tls yang dideritanya dan saya tidak dapat menemukan perbaikan di mana pun (saya memiliki google ke halaman 5 hasil google yang sangat dalam) saya tidak tahu bagaimana orang lain tidak bicarakan itu, apakah saya melewatkan sesuatu di sini! !!!!! mohon koreksi saya jika saya salah !!
rejectUnauthorized works in options.rejectUnauthorized = false
but not in options.agentOptions.rejectUnauthorized = false
Keduanya tidak bekerja untuk saya
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 Menjalankan kode dari dalam ELEKTRON dengan ssl menonaktifkan flag aktif.
Bagi saya, menonaktifkan antivirus Kaspersky memecahkan masalah.
https://github.com/request/request/issues/2061#issuecomment -182573171 tampaknya menjadi jawaban untuk pertanyaan umum
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Tidak memberikan efek.
Komentar yang paling membantu
Terima kasih atas penjelasannya. Saya menemukan cara menghindari masalah dengan sertifikat palsu jika ada yang tertarik:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Dengan itu saya dapat menggunakan otentikasi SSL palsu untuk memeriksa komunikasi antara klien saya dan server.