Я пытаюсь загрузить файл с сервера jira, используя URL-адрес, но получаю сообщение об ошибке. как включить сертификат в код для проверки ошибки:
Error: unable to verify the first certificate in nodejs
at Error (native)
at TLSSocket.<anonymous> (_tls_wrap.js:929:36)
at TLSSocket.emit (events.js:104:17)
at TLSSocket._finishInit (_tls_wrap.js:460:8)
Мой код Nodejs:
var https = require("https");
var fs = require('fs');
var options = {
host: 'jira.example.com',
path: '/secure/attachment/206906/update.xlsx'
};
https.get(options, function (http_res) {
var data = "";
http_res.on("data", function (chunk) {
data += chunk;
});
http_res.on("end", function () {
var file = fs.createWriteStream("file.xlsx");
data.pipe(file);
});
});
node.js
ssl-certificate
jira
Labeo
источник
источник
Ответы:
Попробуйте добавить соответствующий корневой сертификат
Это всегда будет гораздо более безопасным вариантом, чем просто слепое принятие неавторизованных конечных точек, которые, в свою очередь, должны использоваться только в крайнем случае.
Это может быть так же просто, как добавить
в ваше приложение.
НПЙ пакет SSL корневых центров сертификации (как здесь используется) очень полезный пакет относительно этой проблемы.
источник
$(mkcert -CAROOT)/rootCA.pem
в новом файле сертификата, и сделать что-то вродеhttps.globalAgent.options.ca = fs.readFileSync('fullchain.pem')
См. Github.com/FiloSottile/mkcert/issues/76ssl-root-cas
модуле npm есть запрос к жестко запрограммированному mozilla.org git.coolaj86.com/coolaj86/ssl-root-cas.js/src/branch/master/… . Вероятно, это безопасно, потому что Mozilla, но похоже на вектор атаки.Еще один грязный прием, который сделает все ваши запросы небезопасными:
источник
для невозможности проверить первый сертификат в nodejs необходимо отклонить неавторизованный
источник
Сервер, с которого вы пытаетесь выполнить загрузку, может быть неправильно настроен. Даже если он работает в вашем браузере, он может не включать в цепочку все общедоступные сертификаты, необходимые для проверки клиентом с пустым кешем.
Рекомендую проверить сайт в инструменте SSLlabs: https://www.ssllabs.com/ssltest/
Ищите эту ошибку:
И это:
источник
cat domainname.crt domainname.ca-bundle > domainname-ssl-bundle.crt
unable to verify the first certificate
Цепочка сертификатов неполная.
Это означает, что веб-сервер, к которому вы подключаетесь, неправильно настроен и не включил промежуточный сертификат в цепочку сертификатов, которую он вам отправил.
Цепочка сертификатов
Скорее всего, это выглядит так:
На сервере должен быть установлен промежуточный сертификат вместе с сертификатом сервера.
Корневые сертификаты встроены в программные приложения, браузеры и операционные системы.
Приложение, обслуживающее сертификат, должно отправить полную цепочку, то есть сам сертификат сервера и все промежуточные звенья. Предполагается, что корневой сертификат известен клиенту.
Воссоздайте проблему
Перейдите на https://incomplete-chain.badssl.com в браузере.
Ошибок не отображается (замок в адресной строке зеленый).
Это потому, что браузеры, как правило, завершают цепочку, если она не отправляется с сервера.
Теперь подключитесь к https://incomplete-chain.badssl.com, используя Node:
Журналы: « Ошибка: не удалось проверить первый сертификат ».
Решение
Вам необходимо самостоятельно заполнить цепочку сертификатов.
Для этого:
1: Вам нужно получить недостающий промежуточный сертификат в
.pem
формате, затем2a: расширить встроенное хранилище сертификатов Node, используя
NODE_EXTRA_CA_CERTS
,2b: или передайте собственный комплект сертификатов (промежуточные и корневой) с помощью
ca
option.1. Как получить промежуточный сертификат?
Использование
openssl
(поставляется с Git для Windows ).Сохраните данные сертификата удаленного сервера:
Ищем эмитента (промежуточный сертификат является эмитентом / подписчиком сертификата сервера):
Он должен предоставить вам URI сертификата подписи. Загрузить:
Наконец, преобразуйте его в
.pem
:2а. NODE_EXTRA_CERTS
Я использую cross-env для установки переменных среды в
package.json
файле:2b.
ca
вариантЭта опция будет перезаписывать встроенные корневые центры сертификации узла.
Вот почему нам нужно создать собственный корневой ЦС. Используйте ssl-root-cas .
Затем создайте настраиваемый
https
агент, настроенный с помощью нашего пакета сертификатов (корневой и промежуточный). Передайте этого агентаaxios
при отправке запроса.Вместо того, чтобы создавать настраиваемый
https
агент и передавать егоaxios
, вы можете разместить сертификаты наhttps
глобальном агенте:Ресурсы:
источник
Это фактически решило это для меня, из https://www.npmjs.com/package/ssl-root-cas
источник
Вы можете сделать это, изменив параметры запроса, как показано ниже. Если вы используете самозаверяющий сертификат или отсутствующего посредника, установка для strictSSL значения false не приведет к принудительному пакету запроса для проверки сертификата.
источник
Сертификат GoDaddy SSL CC
Я испытал это, пытаясь подключиться к нашему внутреннему серверу API с сертификатом GoDaddy, и вот код, который я использовал для решения проблемы.
PS:
Используйте прилагаемый сертификат и не забудьте установить библиотеку
npm install ssl-root-cas
источник
Это сработало для меня => добавление агента и для параметра rejectUnauthorized установлено значение false
источник
Другой способ решить эту проблему - использовать следующий модуль.
node_extra_ca_certs_mozilla_bundle
Этот модуль может работать без каких-либо изменений кода, создавая файл PEM, который включает все корневые и промежуточные сертификаты, которым доверяет Mozilla. Вы можете использовать следующую переменную среды (работает с Nodejs v7.3 +),
NODE_EXTRA_CA_CERTS
Чтобы создать файл PEM для использования с указанной выше переменной среды. Вы можете установить модуль, используя:
а затем запустите сценарий узла с переменной среды.
Другие способы использования сгенерированного файла PEM доступны по адресу:
https://github.com/arvind-agarwal/node_extra_ca_certs_mozilla_bundle
ПРИМЕЧАНИЕ: я являюсь автором вышеуказанного модуля.
источник
Я использовал модуль nodemailer npm. Приведенный ниже код решил проблему
источник