Tengo un problema con las solicitudes https del lado del cliente.
Un fragmento puede verse así:
var fs = require('fs'); var https = require('https'); var options = { hostname: 'someHostName.com', port: 443, path: '/path', method: 'GET', key: fs.readFileSync('key.key'), cert: fs.readFileSync('certificate.crt') } var requestGet = https.request(options, function(res){ console.log('resObj', res); }Lo que obtengo es Error: certificado autofirmado en la cadena de certificados.
Cuando uso Postman, puedo importar el certificado y la clave del cliente y usarlos sin ningún problema. ¿Hay alguna solución disponible? También me gustaría que me dieran algunas luces sobre cómo el cartero maneja los certificados y funciona.
Por su pregunta, supongo que está haciendo esto en desarrollo, ya que está utilizando un certificado autofirmado para la comunicación SSL.
Si ese es el caso, agregue como una variable de entorno donde esté ejecutando el nodo
export NODE_TLS_REJECT_UNAUTHORIZED='0' node app.jso ejecutar el nodo directamente con
NODE_TLS_REJECT_UNAUTHORIZED='0' node app.jsEsto le indica a Node que permita certificados que no son de confianza (no confiable = no verificado por una autoridad de certificación)
Si no desea establecer una variable de entorno o necesita hacer esto para varias aplicaciones, npm tiene una configuración strict-ssl que establece en false
npm config set strict-ssl=falseSi ya tiene un certificado de CA como el cartel que mencionó @kDoyle, puede configurarlo en cada solicitud (gracias @nic ferrier).
let opts = { method: 'GET', hostname: "localhost", port: listener.address().port, path: '/', ca: fs.readFileSync("cacert.pem") }; https.request(opts, (response) => { }).end();letsencrypt.org es gratuito, fácil de configurar y las claves se pueden rotar automáticamente. https://letsencrypt.org/docs/
Puede solucionar este problema usando NODE_TLS_REJECT_UNAUTHORIZED=0 en la terminal o insertando la siguiente línea dentro del archivo JS.
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;Tenga en cuenta que esto es un truco y no debe usarse en producción.
Si está utilizando Windows, ejecute el siguiente comando en el símbolo del sistema:
set NODE_TLS_REJECT_UNAUTHORIZED=0 Después de eso, npm install <my-package> funcionará.
Puede escribir el comando npm config set strict-ssl false