Это может быть очень заманчиво сделать rejectUnauthorized: false
илиprocess.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
, но не делайте этого! Он подвергает вас атаке человека в середине.
Другие ответы верны, поскольку проблема заключается в том, что ваш сертификат «подписан промежуточным центром сертификации». Для этого есть простое решение, которое не требует сторонней библиотеки, напримерssl-root-cas
добавление каких-либо дополнительных центров сертификации в узел.
Большинство https-клиентов в опциях поддержки узлов, которые позволяют указать ЦС для каждого запроса, который будет разрешен UNABLE_TO_VERIFY_LEAF_SIGNATURE
. Вот простой пример использования встроенного https
модуля узла .
import https from 'https';
const options = {
host: '<your host>',
defaultPort: 443,
path: '<your path>',
ca: readFileSync(__dirname + '/<your bundle file>.ca-bundle'),
headers: {
'content-type': 'application/json',
}
};
https.get(options, res => {
})
Однако если вы можете настроить параметры 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