Request: Kesalahan: DEPTH_ZERO_SELF_SIGNED_CERT

Dibuat pada 22 Jan 2013  ·  51Komentar  ·  Sumber: request/request

Saya menggunakan sertifikat pengujian yang ditandatangani sendiri di server Apache2 saya dan ketika saya memanggil permintaan saya mendapatkan kesalahan berikut:

Kesalahan: DEPTH_ZERO_SELF_SIGNED_CERT

Saya menggunakan kode berikut di bawah ini untuk mengujinya. Perhatikan bahwa saya juga menggunakan jarum dan berfungsi dengan opsi rejectUnauthorized=true . Saya tidak dapat menemukan yang setara berdasarkan permintaan (saya sudah mencoba strictSSL=false tapi saya rasa itu default). Saya juga tidak dapat menemukan sampel lain yang terkait dengan masalah tersebut.

var request = require('request'),
    needle = require('needle');

request('https://127.0.0.1', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log("REQUEST:"+body);
  } else {
    console.error("REQUEST: "+error)
  }
});

needle.get('https://127.0.0.1',{rejectUnauthorized:false},function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log("NEEDLE:"+body);
  }
});

Komentar yang paling membantu

rejectUnauthorized: false tidak bekerja untuk saya. Sebagai gantinya, menambahkan yang berikut ini menghapus kesalahan:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" // Avoids DEPTH_ZERO_SELF_SIGNED_CERT error for self-signed certs

Semua 51 komentar

Masalah yang sama disini. Menggunakan node v0.10.1 dan versi permintaan terbaru.

masalah yang sama di sini menggunakan v0.10.2

Masalah yang sama di v0.11.1-pre. Saya harus menerima sertifikat yang tidak valid karena saya sedang mengembangkan alat keamanan.

@client = tls.connect @port, @target, {rejectUnhauthorized: false}, =>
@klien.tulis pesan
@client.setEncoding 'utf-8'

Kode yang Anda butuhkan adalah:

request({ url : 'https://127.0.0.1', rejectUnhauthorized : false }, function...

Sunting: Saya menghapus komentar lumpuh yang saya buat, karena itu hanya saya yang lumpuh ....

rejectUnauthorized: false

rejectUnauthorized: false tidak bekerja untuk saya. Sebagai gantinya, menambahkan yang berikut ini menghapus kesalahan:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" // Avoids DEPTH_ZERO_SELF_SIGNED_CERT error for self-signed certs

Saya dapat memverifikasi bahwa NODE_TLS_REJECT_UNAUTHORIZED=0 berfungsi untuk saya, tetapi rejectUnauthorized: false tidak.
Menggunakan simpul v0.10.1

@dankohn & @cliffano +1 untuk saran Anda di sini.

@case NODE_TLS_REJECT_UNAUTHORIZED hanya pintu keluar untuk kembali ke perilaku lama (memungkinkan sertifikat yang tidak valid dan ditandatangani sendiri) menurut https://github.com/joyent/node/pull/4023 , jadi itu hanya solusi bagi saya untuk mendapatkan diri -sertifikat yang ditandatangani bekerja.
Jadi sepertinya rejectUnauthorized: false tidak melakukan apa yang seharusnya dilakukan.

Kita tahu bahwa, dalam banyak kasus, {rejectUnauthorized:false} berfungsi dan dalam beberapa kasus lain tampaknya tidak menyebar ke inti. Pertanyaan yang perlu dijawab adalah "apakah ada kasus Edge di mana permintaan tidak mengatur opsi ini dengan benar atau apakah inti tidak mengamati opsi dengan benar dalam beberapa kasus Edge?"

Saya membutuhkan tes yang sepenuhnya dapat direproduksi untuk menjawab pertanyaan itu.

Sayangnya saya tidak memiliki kasus uji, tetapi ini mungkin membantu:

  • server yang saya ajak bicara membutuhkan SSLv3 untuk beberapa alasan ( kode python untuk referensi ; Saya melihat kesalahan yang sama di Node)
  • ini adalah bagaimana saya memaksa SSLv3 (yang saya tidak dapat menemukan cara untuk melakukannya di Permintaan): https.globalAgent.options.secureProtocol = 'SSLv3_method';

Hai teman-teman,

Terima kasih kepada semua orang yang bekerja di perpustakaan. Saya mencoba menggunakan sertifikat yang ditandatangani sendiri untuk beberapa pengujian dan mendapatkan kesalahan yang sama. Saya telah menyertakan detail di bawah ini. Beri tahu saya jika Anda membutuhkan yang lain. Saya sudah mencoba semua kombinasi penggunaan strictSSL dan rejectUnauthorized tetapi sepertinya tidak berhasil.

Versi simpul: 0.10.10
OS: Windows 7x64
OpenSSL: Win32 1.0.1e
Sertifikat yang dihasilkan menggunakan:
openssl genrsa –out priv.pem 1024
openssl req -x509 -new -key priv.pem -days 3650 -out cert.crt

Kode untuk membuat server

var https = require('https');
var express = require('express');
var app = express();
var credentials = {
    key: fs.readFileSync(__dirname + '/priv.pem', 'utf8'),
    cert: fs.readFileSync(__dirname + '/cert.crt', 'utf8')
};
var server = https.createServer(credentials, app);
server.listen(3000);

Menggunakan permintaan seperti:

var request = require('request');
request.defaults({
    strictSSL: false, // allow us to use our self-signed cert for testing
    rejectUnauthorized: false
});
request('https://localhost:3000', function(err) {
    console.error(err); // outputs the zero_depth error
});

@dankohn bekerja untuk saya

Dengan [email protected] dan nodejs v0.10.15 rejectUnauthorized: false masih tidak berfungsi, saya masih harus menggunakan peretasan ini:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

Yang jelek, karena saya ingin memeriksa validitas dan menerima sertifikat yang ditandatangani sendiri.

Menemukan masalah saat menulis tes tetapi tidak dapat mereplikasi.

Punya kejadian menarik dari masalah ini. Setel strictSSL: false, yang berfungsi pada satu kotak tetapi tidak pada kotak lain (rejectUnauthorized=false juga gagal). Saran @dankohn berhasil.

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

Bekerja untuk restler juga.

Saya bisa membuatnya bekerja menggunakan rejectUnauthorized: false (simpul v0.10.26)

saya tahu ditutup dan digabungkan
tapi mungkin layak disebutkan bahwa:
beberapa lib pihak ke-3 masih bergantung pada permintaan dan penggunaan tanpa rejectUnauthorized: false

Apakah ini masih menjadi masalah?

Ini sudah sangat lama saya tutup, jika sebenarnya masih ada masalah beri tahu saya dan saya akan membuka kembali.

Ini masih menjadi masalah bagi saya

simpul 0.10.31 / permintaan: 2.42.0

tangkapan layar: http://screencast.com/t/hcmHPBlxOHc

request.defaults(
  strictSSL: false # allow us to use our self-signed cert for testing
  rejectUnauthorized: false)

request "https://localhost:8000/index.html", (err, res, body) ->
  return console.error err if err # DEPTH_ZERO_SELF_SIGNED_CERT

Saya masih mengalami masalah dengan ini juga, v0.10.20

Menggunakan process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; trik untuk saat ini

@frankfuu menurut Anda 'trik' ini harus ada dalam dokumentasi?

Ya, kami dapat menggunakan beberapa dokumen dan pengujian untuk masalah SSL seperti ini dan #811. Harus termasuk menerima semua sertifikat dan hanya menerima sertifikat yang diinginkan.

@syzer mungkin? baik setidaknya saya merasa berguna

Masih menjadi masalah bagi saya, v0.10.22.

@dankohn , @cliffano di mana Anda meletakkan "NODE_TLS_REJECT_UNAUTHORIZED" : "0"?

Ini kode saya (tidak berfungsi):
var sabun = membutuhkan('sabun');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email: ' [email protected] ', Sandi: 'passwort123', deviceMac: '00-14-22-01-23-45'};
soap.createClient(url, {"NODE_TLS_REJECT_UNAUTHORIZED" : "0"}, function(err, client) {
client.myOperation(args, function(err, result) {
console.log(err, hasil);
});
});

Letakkan tepat di bagian atas file:

// Avoids DEPTH_ZERO_SELF_SIGNED_CERT error for self-signed certs.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

Dan Kohn mailto:[email protected]
telp:+1-415-233-1000

Pada Kamis, 9 Oktober 2014 pukul 11:41, Thanh [email protected] menulis:

@dankohn https://github.com/dankohn , @cliffano
https://github.com/cliffano di mana Anda meletakkan
"NODE_TLS_REJECT_UNAUTHORIZED" : "0" di?

Ini kode saya (tidak berfungsi):
var sabun = membutuhkan('sabun');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email: ' [email protected] ', Sandi: 'passwort123', deviceMac:
'00-14-22-01-23-45'};
soap.createClient(url, {"NODE_TLS_REJECT_UNAUTHORIZED" : "0"},
fungsi(err, klien) {
client.myOperation(args, function(err, result) {
console.log(err, hasil);
});
});


Balas email ini secara langsung atau lihat di GitHub
https://github.com/mikeal/request/issues/418#issuecomment -58528954.

@dankohn : Saya masih mendapatkan pesan kesalahan yang sama. Kode saya terlihat seperti ini sekarang:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var sabun = membutuhkan('sabun');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email: ' [email protected] ', Sandi: 'passwort123', deviceMac: '00-14-22-01-23-45'};
soap.createClient(url, {rejectUna uthorized:false }, function(err, client) {
client.myOperation(args, function(err, result) {
console.log(err, hasil);
});
});

@apiton : Bisakah Anda menyelesaikannya? Saya masih mendapat masalah yang sama.

URL saya tidak dimulai dengan " https://www. " tetapi " https://link. " mungkinkah ini masalahnya?

@jksdua contoh biasa dan saya dapat mereproduksi kesalahan.

Untuk menyelesaikan masalah @fourq dan @jksdua Anda ingin melakukan ini

var request = require('request');
var request = request.defaults({
  strictSSL: false,
  rejectUnauthorized: false
});

Atau

var request = require('request').defaults({
  strictSSL: false,
  rejectUnauthorized: false
});

Metode defaults akan mengembalikan fungsi.
Jadi, Anda perlu menetapkan variabel request ke fungsi agar opsi default berfungsi.

Juga @frankfuu dapatkah Anda memberikan contoh bagaimana Anda menggunakan permintaan dengan opsi rejectUnauthorized ?

Jika Anda masih mengalami masalah, saya ingin mendapatkan test case lain.

@thadeuszlay Saya tahu Anda baru saja meminta bantuan dengan menggunakan:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

Apakah Anda masih memerlukan bantuan dengan ini?

Catatan versi 2.45.0 dari Permintaan memungkinkan Anda untuk menyetel strictSSL ke false, dan kemudian rejectUnauthorized menjadi false juga.

Namun jika Anda tidak menentukan strictSSL sebagai false, rejectUnauthorized default ke undefined .
Saya berasumsi itu perilaku yang diinginkan.

Hai @seanstrom

Saya tidak ingat contoh yang saya buat tetapi mirip dengan apa yang dimiliki @fourq

permintaan.default(
strictSSL: salah
tolakTidak sah: salah)

Saya tidak punya masalah sejak menggunakan "trik"

@frankfuu
Berdasarkan contoh @fourq , saya menemukan solusi ini di atas.
https://github.com/mikeal/request/issues/418#issuecomment -58959393

Bisakah Anda melihat dan melihat apakah itu akan berhasil untuk Anda?

Catatan versi 2.45.0 dari Request memungkinkan Anda untuk menyetel strictSSL ke false, dan kemudian rejectUnauthorized juga menjadi false.

Apakah wfm gagal sebelumnya tanpa rejectUnauthorized.

@andig istilah obrolan saya agak kabur jadi saya hanya mengonfirmasi bahwa Anda mengatakan:
Menggunakan strictSSL: false berhasil untuk Anda
Benar?

@andig istilah obrolan saya agak kabur jadi saya hanya mengonfirmasi bahwa Anda mengatakan:

@seanstrom maafkan bahasa kekanak-kanakan.

Menggunakan strictSSL: false bekerja untuk Anda. Benar?

Benar. Koneksi SSL saya yang sebelumnya gagal yang membutuhkan rejectUnauthorized: false sekarang bekerja dengan strictSSL: false only.

Saya akan menutup masalah ini
Jika ini masih menjadi masalah bagi siapa pun, saya akan membukanya kembali.
Biarkan aku tahu

masih menjadi masalah di sini v10.0.32
saat mencoba process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
saya mendapat:
_stream_readable.js:748
throw new Error('Tidak dapat beralih ke mode lama sekarang.');

@webduvet dapatkah Anda memberi kami contoh kode?
Itu akan membantu kami men-debug masalah ini

@seanstrom yakin, itu adalah contoh yang sangat sederhana dari nodejs doc.

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
 var tls = membutuhkan('tls');
 var fs = membutuhkan('fs');
 opsi var = {
 sertifikat: fs.readFileSync('test-cert.pem'),
 strictSSL: salah
 };
 var cleartextStream = tls.connect(8000, opsi, fungsi() {
 console.log('klien terhubung',
 cleartextStream.otorisasi ? 'resmi' : 'tidak sah');
 process.stdin.pipe(cleartextStream);
 proses.stdin.resume();
 });

@seanstrom Saya masih mendapatkan kesalahan ini ketika mencoba menggunakan sertifikat yang ditandatangani sendiri.

Masalahnya, rejectUnauthorized: false mematikan semua verifikasi, bukan? Karena itu berfungsi bahkan jika saya tidak memberikan PEM atau kunci atau daftar sertifikat yang dapat diterima. Saya perlu memberikan sertifikat (atau kunci) dan meminta dukungan mesin permintaan benar-benar memeriksa daftar sertifikat.

Ya, rejectUnauthorized: false atau strictSSL: false bukanlah solusi ideal karena menonaktifkan semua verifikasi sertifikat. Dimungkinkan untuk menambahkan CA Anda sendiri untuk sertifikat yang ditandatangani sendiri atau tidak dikenal. Lihat pengujian HTTPS kami untuk contoh cara melakukannya: https://github.com/request/request/blob/master/tests/test-https.js

Terima kasih, Nylen. Tes itu membantu menjernihkan kesalahan yang kami lakukan. Kami menggunakan sertifikat yang ditandatangani sendiri, daripada terlebih dahulu membuat CA yang ditandatangani sendiri dan kemudian menggunakan CA itu untuk menandatangani sertifikat server. Itulah yang saya pikir kami lakukan, tapi ternyata tidak.

Bagi mereka yang ingin memahami sebuah prinsip.

https://nodejs.org/dist/v0.12.9/docs/api/tls.html#tls_tls_connect_options_callback

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "1";
var tls = require('tls');
var fs = require('fs');
var constants = require('constants');
var util = require('util');

var options = {
    host: 'localhost',
    strictSSL: true,
    ca: [fs.readFileSync('trusted1.pem'), fs.readFileSync('trusted2.pem') ],
    rejectUnauthorized: true, // Trust to listed certificates only. Don't trust even google's certificates.
    secureOptions: constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_TLSv1 | constants.SSL_OP_NO_TLSv1_1,
    secureProtocol: 'SSLv23_method',
    ciphers: 'ECDHE-RSA-AES128-SHA256'
};

var socket = tls.connect(3001, options, function() {
    console.log('client connected',
        socket.authorized ? 'authorized' : 'unauthorized',
        socket.encrypted ? 'encrypted' : 'unencrypted',
        '\nCipher: ' + util.inspect(socket.getCipher()),
        '\nCert Info: \n' + util.inspect(socket.getPeerCertificate(true)));
    //process.stdin.pipe(socket);
    //process.stdin.resume();
});

benar-benar terdengar semua masalah Anda adalah sistem klien Anda tidak memiliki konfigurasi sertifikat SSL
pertama-tama konfigurasikan sistem Anda openSsl dan kemudian tambahkan permintaan Anda apakah mendapatkan atau memposting ke process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; itu akan berhasil insya Allah

Hai, yang di sana,

Saya menghadapi masalah serupa tetapi hanya dalam metode "POST" sementara "GET" berfungsi dengan baik. Berikut informasi detailnya:

Kode Tes:

`
var frisby = membutuhkan('frisby');
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var CONF = process.env['CONF'];
var config = membutuhkan('../config/' + CONF);
var data = membutuhkan('../tests_data/batch_data.json');

frisby.globalSetup({
meminta: {
strictSSL: salah,
tolakTidak sah: salah,
header: {'Otorisasi': 'token'},
inspectOnFailure: benar
}
});

frisby.create('Tes#1: Skenario Hari Cerah')
.post(config.api_url + data.api_endpoint, data.test_strace, {rejectUnauthorized: false}, {json: true})
.inspectHeaders()
.inspectRequest()
.inspectJSON()
.expectJSON(data.batch_test_response_1)
.melemparkan();
`

Kesalahan Eksekusi:
Kesalahan-1
Message: Error: Error parsing JSON string: Unexpected token D Given: Destination URL may be down or URL is invalid, Error: ESOCKETTIMEDOUT Stacktrace: Error: Error parsing JSON string: Unexpected token D Given: Destination URL may be down or URL is invalid, Error: ESOCKETTIMEDOUT at _jsonParse (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:1219:11) at null.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:650:20) at null.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:1074:43) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

Kesalahan-2

Message: TypeError: Cannot read property 'headers' of undefined Stacktrace: TypeError: Cannot read property 'headers' of undefined at Frisby.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:894:20) at Frisby.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:940:8) at null.<anonymous> (/usr/src/app/frisby_api/node_modules/frisby/lib/frisby.js:1112:18) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

Apa yang harus diperbarui di sini untuk memperbaiki masalah ini?

Terima kasih

tambahkan ini dan itu harus menyelesaikannya:

https.globalAgent.options.rejectUnauthorized = false;

Apakah halaman ini membantu?
0 / 5 - 0 peringkat