Ошибка CERT_UNTRUSTED при выполнении запроса https

Я пытаюсь выполнить https request со стороны моего сервера узла, но это дает мне следующую ошибку: -

Caught exception: Error: CERT_UNTRUSTED

Если я выполняю http request, то он работает нормально, но для https ссылок не работает.

Вот мой код: -

var request = require('request');
request('https://en.m.wikipedia.org/wiki/Astrid_Olofsdotter_of_Sweden', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // Show the HTML for the Google homepage.
  }
})

Есть идеи?


person arun kamboj    schedule 30.12.2016    source источник
comment
Может быть, вам стоит проверить сетевое окружение? Я запускаю ваш код и отлично работаю.   -  person bananaappletw    schedule 30.12.2016
comment
Как проверить сетевое окружение. код работает нормально на локальном, но не на производстве. У меня возникла проблема с URL-адресом википедии, например en.m.wikipedia.org/wiki/Astrid_Olofsdotter_of_Sweden   -  person arun kamboj    schedule 30.12.2016
comment
Не могли бы вы увидеть консольный журнал производственной среды? Может попробовать распечатать журнал ошибок console.log(error)   -  person bananaappletw    schedule 30.12.2016
comment
я получаю это исключение Caught: Ошибка: CERT_UNTRUSTED   -  person arun kamboj    schedule 30.12.2016
comment
я столкнулся с этой проблемой на URL-адресах википидеи, таких как упомянутая выше ссылка   -  person arun kamboj    schedule 30.12.2016
comment
Как насчет добавления опции ,{strictSSL: false} после параметра URL.   -  person bananaappletw    schedule 30.12.2016
comment
Все еще с той же проблемой.   -  person arun kamboj    schedule 30.12.2016
comment
Только для целей тестирования - вы пытались загрузить сертификат wikipedia.com в формате PEM, а затем указать его как доверенный сертификат, как указано здесь: stackoverflow.com/questions/21004645/ ?   -  person RomanK    schedule 03.01.2017
comment
какую версию npm и node вы используете?   -  person Pritish Vaidya    schedule 03.01.2017
comment
@pritishvaidya моя версия npm — 2.5.1, а версия узла — v0.12.0   -  person arun kamboj    schedule 03.01.2017
comment
вы можете либо попробовать последние версии, если это возможно, либо проверить, есть ли какие-либо proxy or vpn, вызывающие проблему   -  person Pritish Vaidya    schedule 04.01.2017


Ответы (4)


Это может быть связано с рядом вещей, я запустил ваш код, и меня это устраивает.

node --version
v0.12.5

так что я бы посмотрел

  1. версия nodejs, которую вы используете

периодически корневые сертификаты обновляются, я бы предложил обновить, так как может быть, что используемый сертификат новее, чем корневые сертификаты в вашем дистрибутиве, и, следовательно, отображается как ненадежный

  1. сеть - возможно, вы находитесь за прокси-сервером, который делает что-то неожиданное с вашими запросами

  2. целевой сервер, он может возвращать что-то неожиданное.

Наиболее вероятно 1, что вы используете версию nodejs, которая не распознает поставщика сертификатов сайта и поэтому говорит, что он ненадежен.

Я бы поставил 2 и 3 примерно на один уровень вероятности. если вы просматриваете википедию, возможно, они заблокировали вас / подтолкнули вас к странице с ошибкой, где сертификат может быть недействительным.

Хотя вы можете, как предлагали другие авторы, отключить проверку, я бы не советовал делать это как привычку. И никогда не делайте этого в производственной среде.

Единственный раз, когда я нарушаю это правило, касается самоподписанных сертификатов на локальных машинах.

person Tim Marsh    schedule 09.01.2017

Это похоже на проблему с SSL. Лучший способ исправить SSL в сетевой среде.


На данный момент вы можете обойти проблему, сделав rejectUnauthorized как false

const request = require("request");
const https = require('https');
const agentOptions = {
    host: 'en.m.wikipedia.org',
    port: '443',
    path: '/wiki/Astrid_Olofsdotter_of_Sweden',
    rejectUnauthorized: false
};
const agent = new https.Agent(agentOptions);

const postOption = {
    method: 'GET',
    agent: agent,
    uri: 'https://en.m.wikipedia.org/wiki/Astrid_Olofsdotter_of_Sweden'
};

request(postOption, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body);
  }
});
person abilng    schedule 09.01.2017

Вы можете обойти https, используя следующие команды:

npm config set strict-ssl false

Установка strict-ssl false позволяет всем серверам узлов получать доступ к любому URL-адресу.

или установите URL-адрес реестра с https или http, как показано ниже:

npm config set registry="http://registry.npmjs.org/"

Примечание. Тем не менее, лично я считаю, что обход https не является реальным решением, но мы можем использовать его в качестве обходного пути.

Надеюсь это поможет.

person SUNDARRAJAN K    schedule 09.01.2017
comment
Неиспользование SSL на самом деле не является ответом на вопрос, как вы, кажется, знаете, исходя из вашей заметки. Предположительно, Арун хочет, чтобы SSL работал в их приложении. Также в комментариях к вопросу Арун говорит, что после добавления strictSSL:false в опции ошибка осталась. - person regdoug; 10.01.2017

Очень близкий ответ находится здесь< /а>.

Очень подробный и конкретный ответ на этот вопрос дан здесь.

Я бы рекомендовал следующее:

Перед вызовом https.request() установите:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

В настройках агента установите:

const agentOptions = {    
    ... 
    rejectUnauthorized: false
};

Кроме того, см. документацию по TLS/SSL библиотеки запросов.

person Socratees Samipillai    schedule 09.01.2017