J'utilise la demande de Mikeal ( https://github.com/mikeal/request ) de faire une demande https à un serveur. Cependant, je continue à recevoir une erreur d'autorisation de CERT_HAS_EXPIRED.
request({
url: 'https://www.domain.com/api/endpoint',
strictSSL: false
}, function(error, response, body) {
if(!error && response.statusCode == 200) {
res.json(JSON.parse(body));
} else {
res.json(response.statusCode, {'error': 'error'})
}
});
J'ai essayé de définir strictSSL sur true et false, les deux générant la même erreur de CERT_HAS_EXPIRED. Qu'est-ce qui cause ce problème et est-il possible de le résoudre dans nodejs?
Ajoutez ceci en haut de votre fichier:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
DANGEROUSCeci désactive la vérification HTTPS/SSL/TLS sur l'ensemble de votre environnement node.js. Veuillez consulter la solution utilisant un agent https ci-dessous.
Renouveler le certificat. Cela peut être fait gratuitement avec Greenlock qui émet des certificats via Let's Encrypt ™ v2
'use strict';
var request = require('request');
var agentOptions;
var agent;
agentOptions = {
Host: 'www.example.com'
, port: '443'
, path: '/'
, rejectUnauthorized: false
};
agent = new https.Agent(agentOptions);
request({
url: "https://www.example.com/api/endpoint"
, method: 'GET'
, agent: agent
}, function (err, resp, body) {
// ...
});
En utilisant une variable agent
avec rejectUnauthorized
, vous limitez au moins la vulnérabilité de la sécurité aux demandes qui traitent ce site, au lieu de rendre votre processus de nœud complet, complètement non sécurisé.
Si vous utilisiez un certificat auto-signé, vous ajouteriez cette option:
agentOptions.ca = [ selfSignedRootCaPemCrtBuffer ];
Pour les connexions de confiance, ajoutez également ces 2 options:
agentOptions.key = clientPemKeyBuffer;
agentOptions.cert = clientPemCrtSignedBySelfSignedRootCaBuffer;
Il est regrettable que process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
soit même documenté. Il ne devrait être utilisé que pour le débogage et ne devrait jamais en faire une sorte de code qui tourne à l'état sauvage. Presque toutes les bibliothèques qui fonctionnent au-dessus de https
disposent d'un moyen de transmettre les options de l'agent. Ceux qui ne le devraient pas devraient être corrigés.
Voici un moyen plus concis de réaliser la méthode "moins sécurisée" proposée par CoolAJ86
request({
url: url,
agentOptions: {
rejectUnauthorized: false
}
}, function (err, resp, body) {
// ...
});
Essayez de modifier temporairement request.js et harcode partoutjecterunauthorized = true, mais il serait préférable d’étendre le certificat comme solution à long terme.