Невозможно проверить подпись листа

Я использую 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()

добавить недостающие сертификаты. См. здесь для получения дополнительной информации:

https://github.com/coolaj86/node-ssl-root-cas


решение 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 и официальный сайт, они ясно упомянули, что сертификат должен быть комбинацией сертификата сервера и прикован сертификаты.

enter image description here


просто положив это здесь, если это кому-то поможет, мой случай был другим и немного странным. Я получал это по запросу, который был доступен через суперагент - проблема не имела ничего общего с сертификатами (что было правильно) и все связано с тем, что тогда я проходил в результате суперагент через асинхронные водопад обратного вызова модуля. Исправить: вместо того, чтобы передавать весь результат, просто передайте 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 сертификат не проверяется, чтобы вы получили свои данные.