Request: Erreur : DEPTH_ZERO_SELF_SIGNED_CERT

Créé le 22 janv. 2013  ·  51Commentaires  ·  Source: request/request

J'utilise des certificats de test auto-signés sur mon serveur apache2 et lorsque j'appelle request, j'obtiens l'erreur suivante :

Erreur : DEPTH_ZERO_SELF_SIGNED_CERT

J'utilise le code suivant ci-dessous pour le tester. Notez que j'utilise également une aiguille et que cela fonctionne avec l'option unlockUnauthorized=true . Je n'ai pas pu trouver d'équivalent sur demande (j'ai essayé strictSSL=false mais je suppose que c'est la valeur par défaut). Je n'ai pas pu trouver d'autres échantillons liés au problème non plus.

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

Commentaire le plus utile

rejectUnauthorized: false n'a pas fonctionné pour moi. Au lieu de cela, l'ajout des éléments suivants a supprimé l'erreur :

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

Tous les 51 commentaires

Même problème ici. Utilisation du nœud v0.10.1 et de la dernière version de la demande.

même problème ici en utilisant v0.10.2

Le même problème dans la v0.11.1-pre. Je dois accepter les certificats invalides car je développe un outil de sécurité.

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

Le code dont vous avez besoin est :

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

Edit: j'ai supprimé le commentaire boiteux que j'ai fait, parce que c'est juste boiteux de ma part....

rejectUnauthorized: false

rejectUnauthorized: false n'a pas fonctionné pour moi. Au lieu de cela, l'ajout des éléments suivants a supprimé l'erreur :

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

Je peux vérifier que NODE_TLS_REJECT_UNAUTHORIZED=0 fonctionne pour moi, mais rejeterUnauthorized : false ne fonctionne pas.
Utilisation du nœud v0.10.1

@dankohn & @cliffano +1 pour vos suggestions ici.

@case NODE_TLS_REJECT_UNAUTHORIZED n'est qu'une échappatoire pour revenir à d'anciens comportements (autorisant les certificats non valides et auto-signés) selon https://github.com/joyent/node/pull/4023 , c'est donc juste une solution de contournement pour moi d'obtenir moi-même -certifié de travail.
Cela ressemble donc à rejeterUnauthorized : false ne fait pas ce qu'il est censé faire.

Nous savons que, dans de nombreux cas, {rejectUnauthorized:false} fonctionne et dans d'autres, il semble ne pas se propager au noyau. La question à laquelle il faut répondre est "y a-t-il un cas limite où la demande ne définit pas cette option correctement ou le noyau n'observe pas correctement l'option dans certains cas limites ?"

J'ai besoin d'un test entièrement reproductible pour répondre à cette question.

Malheureusement, je n'ai pas de cas de test, mais cela pourrait être utile:

  • le serveur auquel je parle nécessite SSLv3 pour une raison quelconque ( code python pour référence ; je voyais la même erreur dans Node)
  • c'est ainsi que je force SSLv3 (ce que je n'ai pas trouvé de moyen de faire dans Request): https.globalAgent.options.secureProtocol = 'SSLv3_method';

Salut les gars,

Merci à tous ceux qui travaillent à la bibliothèque. J'essayais d'utiliser un certificat auto-signé pour certains tests et j'obtenais la même erreur. J'ai inclus les détails ci-dessous. Fait moi savoir si tu as besoin de quoique ce soit d'autre. J'ai essayé toutes les combinaisons d'utilisation de strictSSL et de unlockUnauthorized mais cela ne semble pas fonctionner.

Version du nœud : 0.10.10
Système d'exploitation : Windows 7x64
OpenSSL : Win32 1.0.1e
Certificat généré à l'aide de :
openssl genrsa –out priv.pem 1024
openssl req -x509 -new -key priv.pem -days 3650 -out cert.crt

Code pour créer le serveur

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

En utilisant la requête comme ceci :

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 a travaillé pour moi

Avec [email protected] et nodejs v0.10.15 rejectUnauthorized: false toujours pas fonctionnels, je dois quand même utiliser ce hack :

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

Ce qui est moche, car je voudrais vérifier la validité et accepter les certificats auto-signés.

J'ai trouvé le problème lors de l'écriture d'un test, mais je n'ai pas pu le reproduire.

A eu une occurrence intéressante de ce problème. Définissez strictSSL : false, qui fonctionnait sur une boîte mais pas sur une autre (rejectUnauthorized=false a également échoué). La suggestion de @dankohn a fonctionné.

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ;

Fonctionne aussi pour restler.

J'ai pu le faire fonctionner en utilisant rejectUnauthorized: false (nœud v0.10.26)

je sais qu'il est fermé et fusionné
mais cela vaut peut-être la peine de mentionner que :
certaines bibliothèques tierces dépendent toujours de la demande et s'utilisent sans rejectUnauthorized: false

Est-ce toujours un problème ?

C'est si vieux que je ferme, si c'est toujours un problème, faites-le moi savoir et je rouvrirai.

C'est toujours un problème pour moi

nœud 0.10.31 / requête: 2.42.0

capture d'écran : 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

J'ai toujours un problème avec ça aussi, v0.10.20

Utilisation du process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ; truc pour le moment

@frankfuu pensez -vous que cette "astuce" devrait figurer dans la documentation ?

Oui, nous pourrions utiliser des documents et des tests pour les problèmes SSL comme celui-ci et #811. Devrait inclure l'acceptation de tous les certificats et l'acceptation uniquement des certificats souhaités.

@syzer peut-être ? eh bien au moins je l'ai trouvé utile

Toujours un problème pour moi, v0.10.22.

@dankohn , @cliffano où as-tu mis le "NODE_TLS_REJECT_UNAUTHORIZED" : "0" dedans ?

Voici mon code (ça ne marche pas) :
var savon = require('savon');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email : ' [email protected] ', Mot de passe : '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(erreur, résultat);
});
});

Mettez-le juste en haut du fichier :

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

Dan Kohn mailto:[email protected]
tél. : +1-415-233-1000

Le jeudi 9 octobre 2014 à 11 h 41, Thanh [email protected] a écrit :

@dankohn https://github.com/dankohn , @cliffano
https://github.com/cliffano où avez-vous mis le
"NODE_TLS_REJECT_UNAUTHORIZED" : "0" dans ?

Voici mon code (ça ne marche pas) :
var savon = require('savon');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email : ' [email protected] ', Passwort : 'passwort123', deviceMac :
'00-14-22-01-23-45'} ;
soap.createClient(url, {"NODE_TLS_REJECT_UNAUTHORIZED" : "0"},
fonction (erreur, client) {
client.myOperation(args, function(err, result) {
console.log(erreur, résultat);
});
});

-
Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/mikeal/request/issues/418#issuecomment -58528954.

@dankohn : j'ai toujours le même message d'erreur. Mon code ressemble à ceci maintenant :

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ;
var savon = require('savon');
var url = ' https://link.to/my/url/file.wsdl ';
var args = {Email : ' [email protected] ', Mot de passe : 'passwort123', deviceMac : '00-14-22-01-23-45'} ;
soap.createClient(url, {rejectUna autorisé:false }, function(err, client) {
client.myOperation(args, function(err, result) {
console.log(erreur, résultat);
});
});

@apiton : Pourriez-vous déjà le résoudre ? J'ai toujours le même problème.

mon URL ne commence pas par " https://www. " mais " https://link. " Serait-ce le problème ?

L' exemple

Pour résoudre à la fois le problème @fourq et @jksdua , vous voulez faire ceci

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

Ou

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

La méthode defaults renverra une fonction.
Vous devez donc affecter la variable request à la fonction pour que les options par défaut fonctionnent.

Aussi @frankfuu pouvez-vous fournir un exemple de la façon dont vous utilisez la requête avec l'option rejectUnauthorized ?

Si vous rencontrez toujours des problèmes, j'aimerais obtenir un autre cas de test.

@thadeuszlay Je sais que vous venez de demander de l'aide pour utiliser :
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ;

Avez-vous encore besoin d'aide pour cela?

Notez que la version 2.45.0 de Request vous permet simplement de définir strictSSL sur false, puis rejectUnauthorized devient également false.

Cependant, si vous ne spécifiez pas que strictSSL est faux, rejectUnauthorized défaut est undefined .
Je suppose que c'est le comportement souhaité.

Salut @seanstrom

Je ne me souviens pas de l'exemple que j'ai fait mais c'était similaire à ce que @fourq avait

request.defaults(
strictSSL : faux
rejeterUnauthorized : faux)

Je n'ai pas eu de problèmes depuis que j'utilise "l'astuce"

@frankfuu
Sur la base de l'exemple de @fourq , j'ai proposé cette solution ci-dessus.
https://github.com/mikeal/request/issues/418#issuecomment -58959393

Pouvez-vous jeter un œil et voir si cela fonctionnerait pour vous?

Notez que la version 2.45.0 de Request vous permet simplement de définir strictSSL sur false, puis rejetUnauthorized devient également false.

Est-ce que wfm a échoué auparavant sans rejet non autorisé.

@andig mon jargon de discussion est un peu flou, alors je confirme simplement que vous dites :
L'utilisation de strictSSL: false fonctionne pour vous
Correct?

@andig mon jargon de discussion est un peu flou, alors je confirme simplement que vous dites :

@seanstrom s'il vous plaît pardonnez le langage enfantin.

Utiliser strictSSL : false fonctionne pour vous. Correct?

Correct. Ma connexion SSL défaillante qui nécessitait le rejetUnauthorized : false fonctionne désormais avec strictSSL : false uniquement.

je vais clore ce sujet
Si le problème persiste pour quelqu'un, je le rouvrirai.
Fais-moi savoir

toujours un problème ici v10.0.32
en essayant process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ;
Je reçois:
_stream_readable.js:748
throw new Error('Impossible de passer à l'ancien mode maintenant.');

@webduvet pouvez-vous nous donner un exemple de code ?
Cela nous aidera à déboguer ce problème

@seanstrom bien sûr, c'était un échantillon très simple de nodejs doc.

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ;
 var tls = require('tls');
 var fs = require('fs');
 var options = {
 cert : fs.readFileSync('test-cert.pem'),
 strictSSL : faux
 } ;
 var cleartextStream = tls.connect(8000, options, function() {
 console.log('client connecté',
 cleartextStream.authorized ? 'autorisé' : 'non autorisé');
 process.stdin.pipe(cleartextStream);
 process.stdin.resume();
 });

@seanstrom Je reçois toujours cette erreur lorsque j'essaie d'utiliser des certificats auto-signés.

Le truc, c'est que rejetezUnauthorized : faux désactive toute vérification, n'est-ce pas ? Parce que cela fonctionne même si je ne fournis pas de PEM, de clé ou de liste de certificats acceptables. Je dois fournir un certificat (ou une clé) et demander au support du moteur de requête de vérifier la liste des certificats.

Oui, rejectUnauthorized: false ou strictSSL: false ne sont pas des solutions idéales car elles désactivent toute vérification de certificat. Il est cependant possible d'ajouter vos propres autorités de certification pour les certificats auto-signés ou non reconnus. Jetez un œil à nos tests HTTPS pour un exemple de la façon de procéder : https://github.com/request/request/blob/master/tests/test-https.js

Merci Nylen. Ce test a aidé à clarifier ce que nous faisions mal. Nous utilisions des certificats auto-signés, plutôt que de créer d'abord une autorité de certification auto-signée, puis d'utiliser cette autorité pour signer le certificat du serveur. C'est ce que je pensais que nous faisions, mais nous ne l'avons pas fait.

Pour ceux qui souhaitent comprendre un principe.

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

vraiment, tous vos problèmes semblent être que votre système client n'a pas de configuration de certificat SSL
configurez d'abord vos systèmes openSsl et ajoutez ensuite votre demande, qu'elle soit get ou post, à process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ; ça marcherait incha Allah

Salut,

Je suis confronté au même problème, mais uniquement dans la méthode "POST" alors que "GET" fonctionne correctement. Voici les informations détaillées :

Code d'essai :

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

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

frisby.globalSetup({
demande: {
strictSSL : faux,
rejeterUnauthorized : faux,
en-têtes : {'Authorization' : 'token'},
inspectOnFailure : vrai
}
});

frisby.create('Test n°1 : scénario Sunny Day')
.post(config.api_url + data.api_endpoint, data.test_strace, {rejectUnauthorized : false}, {json : true})
.inspectHeaders()
.inspectRequest()
.inspectJSON()
.expectJSON(data.batch_test_response_1)
.lancer();
`

Erreur d'exécution :
Erreur-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)

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

Que faut-il mettre à jour ici pour résoudre ces problèmes ?

Merci

ajoutez ceci et cela devrait le résoudre:

https.globalAgent.options.rejectUnauthorized = false;

Cette page vous a été utile?
0 / 5 - 0 notes