servidor node ejecutar con certificado node.js ssl-certificate jira

node.js - ejecutar - Error: no se puede verificar el primer certificado en nodejs



node js servidor https (9)

Estoy tratando de descargar un archivo del servidor jira usando una url pero recibo un error. Cómo incluir el certificado en el código para verificar el error:

Error: unable to verify the first certificate in nodejs at Error (native) at TLSSocket.<anonymous> (_tls_wrap.js:929:36) at TLSSocket.emit (events.js:104:17) at TLSSocket._finishInit (_tls_wrap.js:460:8)

Mi código Nodejs:

var https = require("https"); var fs = require(''fs''); var options = { host: ''jira.example.com'', path: ''/secure/attachment/206906/update.xlsx'' }; https.get(options, function (http_res) { var data = ""; http_res.on("data", function (chunk) { data += chunk; }); http_res.on("end", function () { var file = fs.createWriteStream("file.xlsx"); data.pipe(file); }); });


Esto funcionó para mí => agregar agente y ''rechazar no autorizado'' establecido en falso

const https = require(''https''); //Add This const bindingGridData = async () => { const url = `your URL-Here`; const request = new Request(url, { method: ''GET'', headers: new Headers({ Authorization: `Your Token If Any`, ''Content-Type'': ''application/json'', }), //Add The Below agent: new https.Agent({ rejectUnauthorized: false, }), }); return await fetch(request) .then((response: any) => { return response.json(); }) .then((response: any) => { console.log(''response is'', response); return response; }) .catch((err: any) => { console.log(''This is Error'', err); return; }); };


Intente agregar el certificado raíz apropiado

Esta siempre será una opción mucho más segura que aceptar ciegamente puntos finales no autorizados, que a su vez solo deben usarse como último recurso.

Esto puede ser tan simple como agregar

require(''https'').globalAgent.options.ca = require(''ssl-root-cas/latest'').create();

a su aplicación

El paquete npm SSL Root CAs (como se usa aquí) es un paquete muy útil con respecto a este problema.


El servidor desde el que intenta descargar puede estar mal configurado. Incluso si funciona en su navegador, es posible que no incluya todos los certificados públicos en la cadena necesarios para que un cliente con caché vacío verifique.

Recomiendo revisar el sitio en la herramienta SSLlabs: https://www.ssllabs.com/ssltest/

Busque este error:

La cadena de certificados de este servidor está incompleta.

Y esto:

Problemas de cadena ......... Incompleto


Estaba usando el módulo nodemailer npm. El siguiente código resolvió el problema

tls: { // do not fail on invalid certs rejectUnauthorized: false }


Esto realmente lo resolvió para mí, desde https://www.npmjs.com/package/ssl-root-cas

// INCORRECT (but might still work) var server https.createServer({ key: fs.readFileSync(''privkey.pem'', ''ascii'') , cert: fs.readFileSync(''cert.pem'', ''ascii'') // a PEM containing ONLY the SERVER certificate }); // CORRECT (should always work) var server https.createServer({ key: fs.readFileSync(''privkey.pem'', ''ascii'') , cert: fs.readFileSync(''fullchain.pem'', ''ascii'') // a PEM containing the SERVER and ALL INTERMEDIATES });


Otro truco sucio, que hará que todas tus solicitudes sean inseguras:

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


Puede hacerlo modificando las opciones de solicitud como se muestra a continuación. Si está utilizando un certificado autofirmado o un intermediario faltante, establecer estrictoSSL en falso no obligará al paquete de solicitud a validar el certificado.

var options = { host: ''jira.example.com'', path: ''/secure/attachment/206906/update.xlsx'', strictSSL: false }


para no poder verificar el primer certificado en nodejs se necesita rechazar sin autorización

request({method: "GET", "rejectUnauthorized": false, "url": url, "headers" : {"Content-Type": "application/json", function(err,data,body) { }).pipe( fs.createWriteStream(''file.html''));


GoDaddy SSL CCertificate

He experimentado esto al intentar conectarme a nuestro servidor API de back-end con el certificado GoDaddy y aquí está el código que utilicé para resolver el problema.

var rootCas = require(''ssl-root-cas/latest'').create(); rootCas .addFile(path.join(__dirname, ''../config/ssl/gd_bundle-g2-g1.crt'')) ; // will work with all https requests will all libraries (i.e. request.js) require(''https'').globalAgent.options.ca = rootCas;

PD:

Use el certificado incluido y no olvide instalar la biblioteca npm install ssl-root-cas