Не удается проверить подпись листа
Я использую узел.Яш запросу.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 install ssl-root-cas
этот пакет содержит много промежуточных сертификатов, которым браузеры доверяют, но узел не доверяет.
var sslRootCAs = require('ssl-root-cas/latest') sslRootCAs.inject()
добавить недостающие сертификаты. Смотрите здесь для получения дополнительной информации:
решение CoolAJ86 является правильным, и это не ставит под угрозу вашу безопасность, как отключение всех проверок с помощью
rejectUnauthorized
илиNODE_TLS_REJECT_UNAUTHORIZED
. Тем не менее, вам может потребоваться явно ввести дополнительный сертификат CA.я попробовал первый корневые центры сертификации, включены 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 (где эта ошибка тоже возникает, и этот вопрос является результатом # 1 Google), вы, вероятно, используете
HTTPS=true npm start
иproxy
(inpackage.json
), который идет к некоторому HTTPS API, который сам является самоподписанным, когда находится в разработке.если это так, подумайте об изменении
proxy
такой:"proxy": { "/api": { "target": "https://localhost:5001", "secure": false } }
secure
решает, проверяет ли прокси-сервер WebPack цепочку сертификатов или нет, и отключает, что обеспечивает самозаверяющий API сертификат не проверяется, чтобы вы получили свои данные.