Request: Ошибка: DEPTH_ZERO_SELF_SIGNED_CERT

Созданный на 22 янв. 2013  ·  51Комментарии  ·  Источник: request/request

Я использую самозаверяющие тестовые сертификаты на своем сервере apache2, и когда я вызываю запрос, я получаю следующую ошибку:

Ошибка: DEPTH_ZERO_SELF_SIGNED_CERT

Я использую следующий код ниже, чтобы проверить это. Обратите внимание, что я также использую иглу, и она работает с параметром rejectUnauthorized = true . Мне не удалось найти аналог по запросу (я пробовал strictSSL = false, но думаю, что это значение по умолчанию). Я не смог найти никаких других образцов, связанных с этой проблемой.

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);
  }
});

Самый полезный комментарий

rejectUnauthorized: false у меня не сработало. Вместо этого добавление следующего устраняет ошибку:

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

Все 51 Комментарий

Здесь та же проблема. Используется узел v0.10.1 и последняя версия запроса.

такая же проблема здесь с использованием v0.10.2

Та же проблема в v0.11.1-pre. Мне нужно принять недействительные сертификаты, потому что я разрабатываю инструмент безопасности.

@client = tls.connect @port , @target , {rejectUnhauthorized: false}, =>
@ client. написать сообщение
@ client.setEncoding 'utf-8'

Код, который вам нужен:

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

Изменить: я удалил хромой комментарий, который я сделал, потому что это просто хромой с моей стороны ....

rejectUnauthorized: false

rejectUnauthorized: false у меня не сработало. Вместо этого добавление следующего устраняет ошибку:

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

Я могу убедиться, что NODE_TLS_REJECT_UNAUTHORIZED = 0 у меня работает, а rejectUnauthorized: false - нет.
Использование узла v0.10.1

@dankohn и @cliffano +1 за ваши предложения.

@case NODE_TLS_REJECT_UNAUTHORIZED - это всего лишь аварийный выход, чтобы вернуться к старому поведению (разрешая недействительные и самоподписанные сертификаты) в соответствии с https://github.com/joyent/node/pull/4023 , поэтому для меня это просто обходной путь, чтобы получить себя -подписанный сертификат рабочий.
Таким образом, похоже, что rejectUnauthorized: false не выполняет то, что должно делать.

Мы знаем, что во многих случаях {rejectUnauthorized:false} работает, а в некоторых других не распространяется на ядро. Вопрос, на который необходимо ответить, заключается в следующем: «Существует ли пограничный случай, когда запрос не устанавливает эту опцию должным образом или ядро ​​не соблюдает должным образом эту опцию в некоторых пограничных случаях?»

Чтобы ответить на этот вопрос, мне нужен полностью воспроизводимый тест.

К сожалению, у меня нет тестового примера, но это может быть полезно:

  • сервер, с которым я разговариваю, по какой-то причине требует SSLv3 ( код Python для справки ; я видел ту же ошибку в Node)
  • вот как я принудительно использую SSLv3 (что я не мог найти в запросе): https.globalAgent.options.secureProtocol = 'SSLv3_method';

Привет, ребята,

Спасибо всем, кто работает над библиотекой. Я пытался использовать самозаверяющий сертификат для некоторого тестирования и получил ту же ошибку. Я включил подробности ниже. Позвольте мне знать, если вам нужно что-нибудь еще. Я пробовал все комбинации использования strictSSL и rejectUnauthorized, но, похоже, это не работает.

Версия узла: 0.10.10
ОС: Windows 7 x64
OpenSSL: Win32 1.0.1e
Сертификат создан с использованием:
openssl genrsa –out priv.pem 1024
openssl req -x509 -new -key priv.pem -days 3650 -out cert.crt

Код для создания сервера

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);

Используя запрос так:

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 работал на меня

Поскольку [email protected] и nodejs v0.10.15 rejectUnauthorized: false все еще не работают, мне все еще нужно использовать этот хак:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

Это некрасиво, потому что я хотел бы проверить действительность и принять самоподписанные сертификаты.

Обнаружил проблему при написании теста, но не смог воспроизвести.

Был интересный случай этой проблемы. Установите strictSSL: false, который работал с одним ящиком, но не работал с другим (rejectUnauthorized = false также не удалось). Предложение @dankohn сработало.

process.env.NODE_TLS_REJECT_UNAUTHORIZED = «0»;

Подходит и для рестлера.

Мне удалось заставить его работать, используя rejectUnauthorized: false (узел v0.10.26)

я знаю, что закрыто и объединено
но, возможно, стоит упомянуть следующее:
некоторые сторонние библиотеки по-прежнему зависят от запроса и используются без rejectUnauthorized: false

Это все еще проблема?

Это настолько старое, что я закрываюсь, если это все еще проблема, просто дайте мне знать, и я снова открою.

Это все еще проблема для меня

узел 0.10.31 / запрос: 2.42.0

снимок экрана: 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

У меня все еще проблема с этим, v0.10.20

Используя процесс. Env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; трюк на данный момент

@frankfuu, как вы думаете, эта «уловка» должна быть в документации?

Да, мы могли бы использовать некоторые документы и тесты для устранения проблем с SSL, подобных этой и # 811. Должен включать принятие всех сертификатов и принятие только желаемых сертификатов.

@syzer возможно? ну, по крайней мере, я нашел это полезным

Все еще проблема для меня, v0.10.22.

@dankohn , @cliffano, где вы поместили "NODE_TLS_REJECT_UNAUTHORIZED": "0"?

Это мой код (не работает):
var soap = require ('мыло');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {электронная почта: ' [email protected] ', пароль: '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 (ошибка, результат);
});
});

Поместите его прямо в начало файла:

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

Дэн Кон mailto: [email protected]
тел: + 1-415-233-1000

В четверг, 9 октября 2014 г., в 11:41, Thanh [email protected] написал:

@dankohn https://github.com/dankohn , @cliffano
https://github.com/cliffano где вы положили
«NODE_TLS_REJECT_UNAUTHORIZED»: «0» в?

Это мой код (не работает):
var soap = require ('мыло');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Электронная почта: ' [email protected] ', Пароль: '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 (ошибка, результат);
});
});

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/mikeal/request/issues/418#issuecomment -58528954.

@dankohn : Я все еще получаю то же сообщение об ошибке. Теперь мой код выглядит так:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = «0»;
var soap = require ('мыло');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {электронная почта: ' [email protected] ', пароль: '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 (ошибка, результат);
});
});

@apiton : Вы уже могли бы это решить? У меня все еще та же проблема.

мой URL-адрес начинается не с « https: // www. », а с « https: // ссылка». Может быть, в этом проблема?

Пример @jksdua был обычным, и я смог воспроизвести ошибку.

Чтобы решить проблему как @fourq, так и @jksdua, вы хотите сделать это

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

Или

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

Метод defaults вернет функцию.
Поэтому вам нужно присвоить функции переменную request чтобы параметры по умолчанию работали.

Также @frankfuu, можете ли вы предоставить пример того, как вы используете запрос с опцией rejectUnauthorized ?

Если у вас все еще есть проблемы, я хотел бы получить еще один тестовый пример.

@thadeuszlay Я знаю, что вы только что попросили помощи с использованием:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = «0»;

Вам все еще нужна помощь с этим?

Обратите внимание, что версия 2.45.0 запроса позволяет просто установить для strictSSL значение false, а затем rejectUnauthorized станет false.

Однако, если вы не укажете strictSSL как false, rejectUnauthorized умолчанию будет undefined .
Я предполагаю, что это желаемое поведение.

Привет @seanstrom

Я не помню пример, который я сделал, но он был похож на то, что было у @fourq

request.defaults (
strictSSL: ложь
rejectUnauthorized: false)

У меня не было проблем с тех пор, как я применил "трюк"

@frankfuu
На основе примера @fourq я придумал это решение выше.
https://github.com/mikeal/request/issues/418#issuecomment -58959393

Можете ли вы взглянуть и посмотреть, сработает ли это для вас?

Обратите внимание, что версия 2.45.0 Request позволяет вам просто установить для strictSSL значение false, а затем rejectUnauthorized также становится false.

Это wfm, где он раньше не работал без rejectUnauthorized.

@andig, мой жаргон в чате немного нечеткий, поэтому я просто подтверждаю, что вы говорите:
Использование strictSSL: false работает для вас
Правильный?

@andig, мой жаргон в чате немного нечеткий, поэтому я просто подтверждаю, что вы говорите:

@seanstrom, прости, пожалуйста, за детский язык.

Использование strictSSL: false работает для вас. Правильный?

Правильный. Мое предыдущее неудачное SSL-соединение, которое требовало rejectUnauthorized: false, теперь работает только со strictSSL: false.

Я закрою этот вопрос
Если это все еще проблема для кого-то, я снова открою его.
Дай мне знать

все еще проблема здесь v10.0.32
при попытке process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
я получил:
_stream_readable.js: 748
выдать новую ошибку («Невозможно переключиться в старый режим.»);

@webduvet, можешь ли ты дать нам образец кода?
Это поможет нам решить эту проблему.

@seanstrom, конечно, это был очень простой пример из документа nodejs.

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = «0»;
 var tls = require ('tls');
 var fs = require ('fs');
 var options = {
 сертификат: fs.readFileSync ('test-cert.pem'),
 strictSSL: ложь
 };
 var cleartextStream = tls.connect (8000, options, function () {
 console.log ('клиент подключен',
 cleartextStream.authorized? 'разрешено': 'неавторизовано');
 process.stdin.pipe (cleartextStream);
 process.stdin.resume ();
 });

@seanstrom Я все еще получаю эту ошибку при попытке использовать самозаверяющие сертификаты.

Дело в том, что rejectUnauthorized: false отключает все проверки, верно? Потому что это работает, даже если я не предоставлю PEM, ключ или список допустимых сертификатов. Мне нужно предоставить сертификат (или ключ), и служба поддержки механизма запросов действительно проверит список сертификатов.

Да, rejectUnauthorized: false или strictSSL: false не идеальные решения, потому что они отключают все проверки сертификатов. Однако можно добавить свои собственные центры сертификации для самозаверяющих или нераспознанных сертификатов. Взгляните на наши тесты HTTPS, чтобы увидеть, как это сделать: https://github.com/request/request/blob/master/tests/test-https.js

Спасибо, Найлен. Этот тест помог выяснить, что мы делаем неправильно. Мы использовали самозаверяющие сертификаты, а не сначала создавали самозаверяющий ЦС, а затем использовали этот ЦС для подписи сертификата сервера. Я думал, что мы делаем именно это, но это не так.

Для тех, кто хочет понять принцип.

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();
});

на самом деле все ваши проблемы звучат так, что ваша клиентская система не имеет конфигурации сертификата SSL
сначала настройте вашу систему openSsl, а затем добавьте свой запрос, будь то получение или отправка, в process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; это сработает иншаАллах

Всем привет,

Я столкнулся с аналогичной проблемой, но только в методе «POST», пока «GET» работает нормально. Вот подробная информация:

Код теста:

`
var frisby = require ('frisby');
process.env.NODE_TLS_REJECT_UNAUTHORIZED = «0»;

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

frisby.globalSetup ({
запрос: {
strictSSL: ложь,
rejectUnauthorized: ложь,
заголовки: {'Авторизация': 'токен'},
inspectOnFailure: истина
}
});

frisby.create ('Тест №1: Сценарий солнечного дня')
.post (config.api_url + data.api_endpoint, data.test_strace, {rejectUnauthorized: false}, {json: true})
.inspectHeaders ()
.inspectRequest ()
.inspectJSON ()
.expectJSON (data.batch_test_response_1)
.бросать();
`

Ошибка выполнения:
Ошибка-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)

Ошибка-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)

Что здесь следует обновить, чтобы исправить эти проблемы?

Спасибо

добавьте это, и он должен решить это:

https.globalAgent.options.rejectUnauthorized = false;

Была ли эта страница полезной?
0 / 5 - 0 рейтинги