Подтвердить что ты не робот

Node -request - Получение ошибки "SSL23_GET_SERVER_HELLO: неизвестный протокол"

Я использую модуль node -request, регулярно отправляя запросы GET на набор URL-адресов и иногда получая ошибку ниже на некоторых сайтах.

Error: 29472:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:683

Проблема в том, что я не получаю эту ошибку всегда или всегда на некоторых URL-адресах, иногда. Кроме того, его нельзя игнорировать с помощью "strictSSL: false".

Я читал, что это может быть связано с тем, что я отправляю запросы SSL с неправильным протоколом (SSLv2, SSLv3, TLS..). Но это не объясняет, почему это происходит нерегулярно.

Btw, я запускаю nodejs на сервере Win 2008.

Любая помощь приветствуется.

4b9b3361

Ответ 1

Это было совсем плохо.

Я использовал стандартный node http.request на части кода, который должен отправлять запросы только http-адресам. Похоже, что у db был один адрес https, который был запрошен со случайным интервалом.

Просто, я пытался отправить HTTP-запрос на https.

Ответ 2

Вы получите такое сообщение об ошибке, если вы запросите ресурс HTTPS через неправильный порт, например 80. Поэтому, пожалуйста, убедитесь, что вы указали правильный порт, 443, в параметрах запроса.

Ответ 3

Некоторые из сайтов говорят на SSLv2 или, по крайней мере, отправляют сервер SSLv2-hello, и ваш клиент не говорит или не настроен на использование SSLv2. Здесь вы должны принять политическое решение. SSLv2 должен был исчезнуть с лица земли несколько лет назад, а сайты, которые все еще используют его, небезопасны. Однако, если вам нужно поговорить с ними, вам просто нужно включить его в конце, если сможете. Я бы пожаловался владельцам сайтов, хотя, если можно.

Ответ 4

У меня была эта проблема (ошибка 403 для каждого пакета), и я не нашел ничего хорошего в Интернете, чтобы решить ее. Мой файл .npmrc внутри моей пользовательской папки был неверным и неправильно понятым. Я изменил эту строку npmrc с

proxy=http://XX.XX.XXX.XXX:XXX/

to:

proxy = XX.XX.XXX.XXX:XXXX

Ответ 5

var https = require('https');
https.globalAgent.options.secureProtocol = 'SSLv3_method';

Ответ 6

Я получил эту ошибку, потому что использовал require('https'), где я должен был использовать require('http').

Ответ 7

Я получил эту ошибку при подключении к Amazon RDS. Я проверил статус сервера на 50% от использования ЦП, пока он был сервером разработки, и никто его не использует.

Он работал раньше, и ничего в конфигурации подключения не изменилось. Перезагрузка сервера исправила проблему для меня.

Ответ 8

в моем случае (веб-сайт SSL использует кривые ev) проблема с SSL была решена путем добавления этой опции ecdhCurve: 'P-521: P-384: P-256'

request({ url, 
   agentOptions: { ecdhCurve: 'P-521:P-384:P-256', }
}, (err,res,body) => {
...

JFYI, может быть, это поможет кому-то

Ответ 9

Я получил эту ошибку, когда использовал ее на моем rocketchat для связи с моим gitlab через корпоративный прокси,

Потому что использовал https://: 8080, но на самом деле он работал для http://: 8080

Ответ 10

Короче говоря,

vi ~/.proxy_info

export http_proxy=<username>:<password>@<proxy>:8080
export https_proxy=<username>:<password>@<proxy>:8080

source ~/.proxy_info

Надеюсь, что это помогает кому-то в спешке :)

Ответ 11

Похоже, вам просто нужно иметь некоторую логику повтора, поэтому прерывистые ошибки вас не повесили.

function faultTolerantRequest (url, trys, retryTime, cb) {
  var attempts = 0;
  function requestFinished (err, res, body) {
    if (err) {
      if (attempts < trys) {
        return setTimeout(tryRequest, retryTime);
      }
      return cb(err);
    }
    return cb(err, res, body);
  }
  function tryRequest () {
    attempts++;
    return request(url, requestFinished);
  }
  return tryRequest();
}