Request: Error: DEPTH_ZERO_SELF_SIGNED_CERT

Creado en 22 ene. 2013  ·  51Comentarios  ·  Fuente: request/request

Estoy usando certificados de prueba autofirmados en mi servidor apache2 y cuando llamo a la solicitud obtengo el siguiente error:

Error: DEPTH_ZERO_SELF_SIGNED_CERT

Estoy usando el siguiente código a continuación para probarlo. Tenga en cuenta que también estoy usando la aguja y funciona con la opción acceptUnauthorized = true . No pude encontrar un equivalente a pedido (probé strictSSL = false pero supongo que es el predeterminado). Tampoco pude encontrar otras muestras relacionadas con el problema.

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

Comentario más útil

rejectUnauthorized: false no funcionó para mí. En cambio, agregar lo siguiente eliminó el error:

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

Todos 51 comentarios

El mismo problema aqui. Usando el nodo v0.10.1 y la última versión de solicitud.

mismo problema aquí usando v0.10.2

El mismo problema en v0.11.1-pre. Necesito aceptar certificados no válidos porque estoy desarrollando una herramienta de seguridad.

@client = tls.connect @port , @target , {seekUnhauthorized: false}, =>
@ client.write mensaje
@ client.setEncoding 'utf-8'

El código que necesita es:

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

Editar: eliminé el comentario tonto que hice, porque eso es simplemente tonto de mi parte ...

rejectUnauthorized: false

rejectUnauthorized: false no funcionó para mí. En cambio, agregar lo siguiente eliminó el error:

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

Puedo verificar que NODE_TLS_REJECT_UNAUTHORIZED = 0 funciona para mí, pero acceptUnauthorized: false no.
Usando el nodo v0.10.1

@dankohn & @cliffano +1 para sus sugerencias aquí.

@case NODE_TLS_REJECT_UNAUTHORIZED es solo una trampilla de escape para volver a comportamientos antiguos (permitiendo certificados no válidos y autofirmados) de acuerdo con https://github.com/joyent/node/pull/4023 , por lo que es solo una solución para que yo me recupere -Cert firmado en funcionamiento.
Por lo tanto, parece rechazarUnauthorized: false no está haciendo lo que se supone que debe hacer.

Sabemos que, en muchos casos, {rejectUnauthorized:false} funciona y en algunos otros parece no propagarse al núcleo. La pregunta que se debe responder es "¿hay un caso límite en el que la solicitud no establece esta opción correctamente o el núcleo no está observando la opción correctamente en algunos casos límite?"

Necesito una prueba completamente reproducible para responder a esa pregunta.

Desafortunadamente, no tengo un caso de prueba, pero esto podría ser útil:

  • el servidor con el que estoy hablando requiere SSLv3 por alguna razón ( código Python como referencia ; estaba viendo el mismo error en el nodo)
  • así es como estoy forzando SSLv3 (que no pude encontrar una manera de hacerlo en Solicitud): https.globalAgent.options.secureProtocol = 'SSLv3_method';

Hola chicos,

Gracias a todos los que trabajan en la biblioteca. Estaba tratando de usar un certificado autofirmado para algunas pruebas y obtengo el mismo error. He incluido detalles a continuación. Déjame saber si necesitas algo más. Probé todas las combinaciones de uso estricto de SSL y rechazo sin autorización, pero no parece funcionar.

Versión de nodo: 0.10.10
SO: Windows 7 x64
OpenSSL: Win32 1.0.1e
Certificado generado usando:
openssl genrsa –out priv.pem 1024
openssl req -x509 -new -key priv.pem -days 3650 -out cert.crt

Código para crear servidor

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

Usando una solicitud así:

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 trabajó para mí

Con [email protected] y nodejs v0.10.15 rejectUnauthorized: false todavía no funcionan, todavía tengo que usar este truco:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

Lo cual es feo, porque me gustaría verificar la validez y aceptar certificados autofirmados.

Encontré el problema mientras escribía una prueba, pero no se pudo replicar.

Tuvo una ocurrencia interesante de este problema. Establezca estrictoSSL: falso, que funcionó en un cuadro pero no en otro (rechazarUnauthorized = falso también falló). La sugerencia de @dankohn funcionó.

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

Funciona también para restler.

Pude hacer que funcionara usando rejectUnauthorized: false (nodo v0.10.26)

sé que está cerrado y fusionado
pero tal vez valga la pena mencionar que:
algunas bibliotecas de terceros aún dependen de la solicitud y el uso sin rejectUnauthorized: false

¿Sigue siendo un problema?

Esto es tan antiguo que estoy cerrando, si en realidad todavía es un problema, avíseme y lo volveré a abrir.

Esto sigue siendo un problema para mí.

nodo 0.10.31 / solicitud: 2.42.0

captura de pantalla: 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

Todavía tengo un problema con esto también, v0.10.20

Usando el process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; truco por ahora

@frankfuu , ¿crees que este 'truco' debería estar en la documentación?

Sí, podríamos usar algunos documentos y pruebas para problemas de SSL como este y el # 811. Debe incluir aceptar todos los certificados y aceptar solo los certificados deseados.

@syzer posiblemente? bueno, al menos lo encontré útil

Sigue siendo un problema para mí, v0.10.22.

@dankohn , @cliffano ¿dónde pusiste el "NODE_TLS_REJECT_UNAUTHORIZED": "0" en?

Este es mi código (no funciona):
var jabón = require ('jabón');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Correo electrónico: ' [email protected] ', Passwort: 'passwort123', deviceMac: '00-14-22-01-23-45 '};
soap.createClient (url, {"NODE_TLS_REJECT_UNAUTHORIZED": "0"}, función (err, cliente) {
client.myOperation (args, function (err, result) {
console.log (err, resultado);
});
});

Ponlo en la parte superior del archivo:

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

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

El jueves 9 de octubre de 2014 a las 11:41 a. M., Thanh [email protected] escribió:

@dankohn https://github.com/dankohn , @cliffano
https://github.com/cliffano ¿dónde pusiste el
"NODE_TLS_REJECT_UNAUTHORIZED": "0" en?

Este es mi código (no funciona):
var jabón = require ('jabón');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Correo electrónico: ' [email protected] ', Passwort: 'passwort123', deviceMac:
'00-14-22-01-23-45 '};
soap.createClient (url, {"NODE_TLS_REJECT_UNAUTHORIZED": "0"},
función (err, cliente) {
client.myOperation (args, function (err, result) {
console.log (err, resultado);
});
});

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/mikeal/request/issues/418#issuecomment -58528954.

@dankohn : sigo recibiendo el mismo mensaje de error. Mi código se ve así ahora:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
var jabón = require ('jabón');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Correo electrónico: ' [email protected] ', Passwort: 'passwort123', deviceMac: '00-14-22-01-23-45 '};
soap.createClient (url, {acceptUna uthorized: false }, function (err, client) {
client.myOperation (args, function (err, result) {
console.log (err, resultado);
});
});

@apiton : ¿Podrías resolverlo ya? Todavía tengo el mismo problema.

mi URL no comienza con " https: // www. " sino " https: // enlace "

El ejemplo de

Para resolver el problema de @fourq y @jksdua , desea hacer esto

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

O

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

El método defaults devolverá una función.
Por lo tanto, debe asignar la variable request a la función para que funcionen las opciones predeterminadas.

Además, @frankfuu, ¿ puede proporcionar un ejemplo de cómo está utilizando request con la opción rejectUnauthorized ?

Si aún tiene problemas, me gustaría obtener otro caso de prueba.

@thadeuszlay Sé que acaba de pedir ayuda para usar:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

¿Aún necesitas ayuda con esto?

Tenga en cuenta que la versión 2.45.0 de Solicitud le permite establecer strictSSL en falso, y luego rejectUnauthorized convierte en falso.

Sin embargo, si no especifica que strictSSL sea ​​falso, rejectUnauthorized defecto es undefined .
Supongo que ese es el comportamiento deseado.

Hola @seanstrom

No recuerdo el ejemplo que hice, pero era similar al que tenía @fourq

request.defaults (
estrictoSSL: falso
rechazarUnauthorized: false)

No he tenido problemas desde que usé "el truco"

@frankfuu
Basado en el ejemplo de @fourq , se me ocurrió esta solución arriba.
https://github.com/mikeal/request/issues/418#issuecomment -58959393

¿Puedes echar un vistazo y ver si eso funcionaría para ti?

Tenga en cuenta que la versión 2.45.0 de Solicitud le permite establecer estrictamenteSSL en falso y luego rechazar no autorizado se convierte en falso también.

Es wfm donde falló antes sin rechazar sin autorización.

@andig, mi jerga en el chat es un poco confusa, así que solo confirmo que estás diciendo:
Usar strictSSL: false está funcionando para usted
¿Correcto?

@andig, mi jerga en el chat es un poco confusa, así que solo confirmo que estás diciendo:

@seanstrom, por favor, perdona el lenguaje infantil.

El uso de estrictoSSL: falso funciona para usted. ¿Correcto?

Correcto. Mi conexión SSL anterior que fallaba y requería rechazoUnauthorized: false ahora está funcionando con estrictaSSL: solo falso.

Cerraré este problema
Si esto sigue siendo un problema para alguien, lo volveré a abrir.
Hágamelo saber

sigue siendo un problema aquí v10.0.32
al intentar process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
yo obtengo:
_stream_readable.js: 748
lanzar un nuevo error ('No se puede cambiar al modo anterior ahora');

@webduvet, ¿ puede darnos una muestra de código?
Eso nos ayudará a solucionar este problema.

@seanstrom seguro, fue una muestra muy simple del documento de nodejs.

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
 var tls = require ('tls');
 var fs = require ('fs');
 var options = {
 cert: fs.readFileSync ('prueba-cert.pem'),
 estrictoSSL: falso
 };
 var cleartextStream = tls.connect (8000, options, function () {
 console.log ('cliente conectado',
 ¿CleartextStream.authorized? 'autorizado': 'no autorizado');
 process.stdin.pipe (cleartextStream);
 process.stdin.resume ();
 });

@seanstrom Sigo recibiendo este error cuando intento usar

La cosa es, rechazar Sin autorización: falso desactiva toda verificación, ¿verdad? Porque funciona incluso si no proporciono un PEM o una clave o una lista de certificados aceptables. Necesito proporcionar un certificado (o clave) y hacer que el soporte del motor de solicitud revise la lista de certificados.

Sí, rejectUnauthorized: false o strictSSL: false no son soluciones ideales porque desactivan toda la verificación de certificados. Sin embargo, es posible agregar sus propias CA para certificados autofirmados o no reconocidos. Eche un vistazo a nuestras pruebas HTTPS para ver un ejemplo de cómo hacer esto: https://github.com/request/request/blob/master/tests/test-https.js

Gracias, Nylen. Esa prueba ayudó a aclarar lo que estábamos haciendo mal. Estábamos usando certificados autofirmados, en lugar de crear primero una CA autofirmada y luego usar esa CA para firmar el certificado del servidor. Eso es lo que pensé que estábamos haciendo, pero no lo estábamos haciendo.

Para aquellos que deseen comprender un principio.

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

realmente suena que todos sus problemas es que su sistema cliente no tiene configuración de certificado SSL
primero configure sus sistemas openSsl y luego agregue su solicitud si es get o post to process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; funcionaría inshaa Allah

Hola,

Estoy enfrentando un problema similar pero solo en el método "POST" mientras que "GET" funciona bien. Aquí está la información detallada:

Código de prueba:

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

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

frisby.globalSetup ({
solicitud: {
estrictaSSL: falso,
rechazar Sin autorización: falso,
encabezados: {'Autorización': 'token'},
inspectOnFailure: true
}
});

frisby.create ('Prueba n. ° 1: escenario de día soleado')
.post (config.api_url + data.api_endpoint, data.test_strace, {seekUnauthorized: false}, {json: true})
.inspectHeaders ()
.inspectRequest ()
.inspectJSON ()
.expectJSON (data.batch_test_response_1)
.sacudida();
'

Error de ejecución:
Error-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)

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

¿Qué debería actualizarse aquí para solucionar estos problemas?

Gracias

agregue esto y debería resolverlo:

https.globalAgent.options.rejectUnauthorized = false;

¿Fue útil esta página
0 / 5 - 0 calificaciones