web-dev-qa-db-fra.com

Impossible de vérifier la signature de la feuille

J'utilise node.js request.js pour atteindre une API. Je reçois cette erreur

[Erreur: UNABLE_TO_VERIFY_LEAF_SIGNATURE]

Toutes mes informations d'identification sont exactes et valides, et l'amende du serveur. J'ai fait la même demande avec postier.

request({
    "url": domain+"/api/orders/originator/"+id,
    "method": "GET",
    "headers":{
        "X-API-VERSION": 1,
        "X-API-KEY": key
    },
}, function(err, response, body){
    console.log(err);
    console.log(response);
    console.log(body);
});

Ce code est en cours d'exécution dans un script exécutable ex. node ./run_file.js, c'est pour ça? A-t-il besoin de fonctionner sur un serveur?

113
ThomasReggi

Note: Ce qui suit est dangereux et permettra au contenu de l'API d'être intercepté et modifié entre le client et le serveur.

Cela a également fonctionné

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

130
ThomasReggi

Ce n'est pas un problème avec l'application, mais avec le certificat qui est signé par une autorité de certification intermédiaire. Si vous acceptez ce fait et souhaitez continuer, ajoutez les éléments suivants pour demander des options:

rejectUnauthorized: false

Demande complète:

request({
    "rejectUnauthorized": false,
    "url": domain+"/api/orders/originator/"+id,
    "method": "GET",
    "headers":{
        "X-API-VERSION": 1,
        "X-API-KEY": key
    },
}, function(err, response, body){
    console.log(err);
    console.log(response);
    console.log(body);
});
83
Andrei Karpushonak

La solution sécurisée

Plutôt que de désactiver la sécurité, vous pouvez ajouter les certificats nécessaires à la chaîne. Première installation du paquet ssl-root-cas à partir de npm:

npm install ssl-root-cas

Ce paquet contient de nombreux certificats intermédiaires auxquels les navigateurs ont confiance, mais pas le noeud.

var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject()

Va ajouter les certificats manquants. Voir ici pour plus d'informations:

https://git.coolaj86.com/coolaj86/ssl-root-cas.js

Voir aussi la réponse suivante ci-dessous

70
CoolAJ86

La solution de CoolAJ86 est correcte et ne compromet pas votre sécurité, comme la désactivation de toutes les vérifications à l'aide de rejectUnauthorized ou NODE_TLS_REJECT_UNAUTHORIZED. Néanmoins, vous devrez peut-être injecter explicitement un certificat supplémentaire d'une autorité de certification.

J'ai d'abord essayé les autorités de certification racine incluses par le module ssl-root-cas :

require('ssl-root-cas/latest')
  .inject();

J'ai toujours eu l'erreur UNABLE_TO_VERIFY_LEAF_SIGNATURE. Ensuite, j'ai découvert qui avait émis le certificat pour le site Web auquel je me connectais par COMODO SSL Analyzer , téléchargé le certificat de cette autorité et tenté d'ajouter uniquement celui-ci:

require('ssl-root-cas/latest')
  .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');

Je me suis retrouvé avec une autre erreur: CERT_UNTRUSTED. Enfin, j'ai injecté les AC supplémentaires et ajouté "mon" AC (apparemment intermédiaire), ce qui a fonctionné:

require('ssl-root-cas/latest')
  .inject()
  .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');
42
Ferdinand Prantl

Pour Create React App (où cette erreur se produit également et que cette question est le résultat n ° 1 de Google), vous utilisez probablement HTTPS=true npm start et un proxy (dans package.json) qui va à une API HTTPS qui est elle-même auto-signée, en cours de développement.

Si c'est le cas, envisagez de changer proxy comme ceci:

"proxy": {
  "/api": {
    "target": "https://localhost:5001",
    "secure": false
  }
}

secure décide si le proxy WebPack vérifie ou non la chaîne de certificats et la désactivation garantit que le certificat auto-signé de l'API n'est pas vérifié afin que vous obteniez vos données.

3
Tomáš Hübelbauer

En mettant cela au cas où cela pourrait aider quelqu'un, mon cas était différent et un mélange un peu étrange. Je recevais ceci sur une requête à laquelle on accédait via superagent - le problème n’avait rien à voir avec les certificats (qui étaient correctement configurés) et le fait que je transmettais alors le résultat du superagent par le rappel de cascade du module asynchrone . Pour réparer: au lieu de passer le résultat entier, il suffit de passer result.body à travers le rappel de la cascade.

2
k00k

J'ai eu les mêmes problèmes. J'ai suivi les solutions @ThomasReggi et @ CoolAJ86 et j'ai bien fonctionné, mais je ne suis pas satisfait de la solution.

Parce que le problème "UNABLE_TO_VERIFY_LEAF_SIGNATURE" est survenu en raison du niveau de configuration de la certification.

J'accepte la solution @thirdender mais sa solution partielle. Selon le site Web officiel nginx , ils mentionnent clairement le certificat doit être une combinaison du certificat de serveur et des certificats chaînés.

enter image description here

2
Sharathi RB

Vous devez inclure le certificat intermédiaire sur votre serveur. Ceci résout le [Erreur: UNABLE_TO_VERIFY_LEAF_SIGNATURE]

0
user8797752

Mettez rejetezUnauthorized: false dans la pétition, et cela a fonctionné pour moi.

0
Amn

J'ai eu un problème avec ma configuration Apache après l'installation d'un certificat GoDaddy sur un sous-domaine. Au départ, je pensais que le problème pourrait être que Node n'envoie pas d'indicateur de nom de serveur (SNI), mais ce n'était pas le cas. L'analyse du certificat SSL du sous-domaine avec https://www.ssllabs.com/ssltest/ a renvoyé l'erreur Problèmes liés à la chaîne: Incomplete .

Après avoir ajouté le fichier Gd_bundle-g2-g1.crt fourni par GoDaddy via la directive Apache SSLCertificateChainFile, Node a pu se connecter via HTTPS et l'erreur a disparu.

0
thirdender