Невозможно проверить подпись листа
Я использую node.запрос js.js для достижения api. Я получаю эту ошибку
[ошибка: UNABLE_TO_VERIFY_LEAF_SIGNATURE]
все мои учетные данные точны и действительны, и сервер в порядке. Я сделал то же самое с почтальоном.
request({
"url": domain+"/api/orders/originator/"+id,
"method": "GET",
"headers":{
"X-API-VERSION": 1,
"X-API-KEY": key
},
}, function(err, response, body){
console.log(err);
console.log(response);
console.log(body);
});
этот код просто выполняется в исполняемом скрипте ex. node ./run_file.js
вот почему? Он должен работать на сервере?
8 ответов
Примечание: следующее Опасно и позволит перехватывать и изменять содержимое API между клиентом и сервером.
Это также сработало
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
это не проблема с приложением, а с сертификатом, который подписан посредником CA. Если вы согласны с этим фактом и все еще хотите продолжить, добавьте следующие параметры запроса:
rejectUnauthorized: false
полный запрос:
request({
"rejectUnauthorized": false,
"url": domain+"/api/orders/originator/"+id,
"method": "GET",
"headers":{
"X-API-VERSION": 1,
"X-API-KEY": key
},
}, function(err, response, body){
console.log(err);
console.log(response);
console.log(body);
});
безопасное решение заключается в добавлении необходимых сертификатов в цепочку. Первая установка ssl-root-cas пакет от npm:
npm install ssl-root-cas
этот пакет содержит много промежуточных сертификатов, которым доверяют браузеры, но не узел.
var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject()
добавить недостающие сертификаты. См. здесь для получения дополнительной информации:
решение CoolAJ86 является правильным, и это не ставит под угрозу вашу безопасность, как отключение всех проверок с помощью rejectUnauthorized
или NODE_TLS_REJECT_UNAUTHORIZED
. Тем не менее, вам может потребоваться явно ввести дополнительный сертификат CA.
я попробовал сначала корневой CAs, включенный ssl-root-cas:
require('ssl-root-cas/latest')
.inject();
Я все равно закончил с UNABLE_TO_VERIFY_LEAF_SIGNATURE
ошибка. Затем я узнал, кто выдал сертификат для веб-сайта, к которому я подключался с помощью COMODO SSL Анализатор, скачал сертификат этого органа и попытался добавить только тот:
require('ssl-root-cas/latest')
.addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');
Я закончил с другой ошибкой:CERT_UNTRUSTED
. Наконец, я ввел дополнительный корень CAs и включил " мой " (по-видимому, посредник) CA, который работал:
require('ssl-root-cas/latest')
.inject()
.addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');
У меня были те же вопросы. Я следил за решением @ThomasReggi и @CoolAJ86 и работал хорошо, но я не доволен решением.
потому что проблема "UNABLE_TO_VERIFY_LEAF_SIGNATURE" произошла из-за уровня конфигурации сертификации.
Я принимаю решение @thirdender, но его частичное решение. Согласно nginx и официальный сайт, они ясно упомянули, что сертификат должен быть комбинацией сертификата сервера и прикован сертификаты.
просто положив это здесь, если это кому-то поможет, мой случай был другим и немного странным. Я получал это по запросу, который был доступен через суперагент - проблема не имела ничего общего с сертификатами (что было правильно) и все связано с тем, что тогда я проходил в результате суперагент через асинхронные водопад обратного вызова модуля. Исправить: вместо того, чтобы передавать весь результат, просто передайте result.body
через водопад обратный звонок.
у меня была проблема с моей конфигурацией Apache после установки сертификата GoDaddy на поддомене. Первоначально я думал, что это может быть проблема с узлом, не отправляющим индикатор имени сервера (SNI), но это не так. Анализируя поддомен SSL-сертификата с https://www.ssllabs.com/ssltest/ ошибка проблемы с цепью: неполный.
после добавления GoDaddy при условии через SSLCertificateChainFile
директива Apache, узел был возможность подключения через HTTPS и ошибка ушла.
на Создать React App (где эта ошибка тоже возникает, и этот вопрос является результатом # 1 Google), вы, вероятно, используете HTTPS=true npm start
и proxy
(in package.json
), который идет к некоторому HTTPS API, который сам является самозаверяющим, когда находится в разработке.
если это так, подумайте об изменении proxy
такой:
"proxy": {
"/api": {
"target": "https://localhost:5001",
"secure": false
}
}
secure
решает, проверяет ли прокси-сервер WebPack цепочку сертификатов или нет, и отключает, что гарантирует самозаверяющий API сертификат не проверяется, чтобы вы получили свои данные.