¡Puede ser muy tentador hacerlo rejectUnauthorized: false
o process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
no hacerlo! Te expone al hombre en los ataques medios.
Las otras respuestas son correctas porque el problema radica en el hecho de que su certificado está "firmado por una CA intermediaria". Hay una solución fácil para esto, una que no requiere una biblioteca de terceros como ssl-root-cas
o inyectar ninguna CA adicional en el nodo.
La mayoría de los clientes https en opciones de soporte de nodo que le permiten especificar una CA por solicitud, que se resolverá UNABLE_TO_VERIFY_LEAF_SIGNATURE
. Aquí hay un ejemplo simple que usa el https
módulo incorporado del nodo .
import https from 'https';
const options = {
host: '<your host>',
defaultPort: 443,
path: '<your path>',
// assuming the bundle file is co-located with this file
ca: readFileSync(__dirname + '/<your bundle file>.ca-bundle'),
headers: {
'content-type': 'application/json',
}
};
https.get(options, res => {
// do whatever you need to do
})
Sin embargo, si puede configurar los ajustes de SSL en su servidor de alojamiento, la mejor solución sería agregar los certificados intermedios a su proveedor de alojamiento. De esa forma, el solicitante del cliente no necesita especificar una CA, ya que está incluida en el servidor. Yo personalmente uso namecheap + heroku. El truco para mí fue crear un archivo .crt con cat yourcertificate.crt bundle.ca-bundle > server.crt
. Luego abrí este archivo y agregué una nueva línea después del primer certificado. Puedes leer más en
https://www.namecheap.com/support/knowledgebase/article.aspx/10050/33/installing-an-ssl-certificate-on-heroku-ssl