Це може бути дуже заманливо зробити rejectUnauthorized: false
або , process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
але не робіть цього! Це піддає вас людині середніх атак.
Інші відповіді вірні в тому, що питання полягає в тому, що ваш сертифікат "підписаний посередником". Для цього є просте рішення, яке не вимагає сторонніх бібліотек на кшталт ssl-root-cas
або введення будь-яких додаткових ЦС у вузол.
Більшість клієнтів https у параметрах підтримки вузлів, які дозволяють вказати CA на запит, що вирішить UNABLE_TO_VERIFY_LEAF_SIGNATURE
. Ось простий приклад використання вбудованого https
модуля вузла .
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
})
Якщо ви можете налаштувати налаштування ssl на своєму хостинг-сервері, найкращим рішенням буде додати проміжні сертифікати до вашого хостинг-провайдера. Таким чином, клієнту-запитувачу не потрібно вказувати ЦС, оскільки він включений у сам сервер. Я особисто використовую namecheap + heroku. Хитрість для мене полягала в тому, щоб створити один .crt файл із cat yourcertificate.crt bundle.ca-bundle > server.crt
. Потім я відкрив цей файл і додав новий рядок після першого сертифіката. Ви можете прочитати більше на
https://www.namecheap.com/support/knowledgebase/article.aspx/10050/33/installing-an-ssl-certificate-on-heroku-ssl