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.
Любая помощь приветствуется.
Ответы
Ответ 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();
}