выдача сертификата в запросе nodejs https - PullRequest
0 голосов
/ 11 января 2019

У меня следующая ошибка при отправке запроса на получение https

{ Error: write EPROTO 101057795:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:openssl\ssl\s23_clnt.c:802:
at _errnoException (util.js:992:11)
at WriteWrap.afterWrite [as oncomplete] (net.js:864:14) code: 'EPROTO', errno: 'EPROTO', syscall: 'write' }

Я пытаюсь сделать запрос к корпоративному внутреннему ресурсу, где прокси не нужен.

const request = require('request')
var token= myToken
request({
  method: 'post',
  url: 'https://myURL',
  data: {
    myData
  },
  headers: { 'Authorization': 'Bearer myToken' },
  agentOptions: {
    rejectUnauthorized: false,
  },
}, function (error, response, body) {
if(error){
  console.log('Error: ', error)
} else {
  console.log(body)
}
})

У меня также есть строгий-ssl = false в моем .npmrc.

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

curl -k1 -XPOST -H "Authorization: Bearer %TOKEN%" "https://%URL% -d @data,json -H "content-type: application/json"
Параметр

-k1 в curl, похоже, решает проблему с сертификатом.

Что я делаю не так в JavaScript?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Оказалось, что это ошибка в версии узла 8. Я наконец нашел решение здесь - https://github.com/nodejs/node/issues/16196

Нужно добавить в ее код следующее:

require("tls").DEFAULT_ECDH_CURVE = "auto"

0 голосов
/ 11 января 2019

request({
  method: 'post',
  url: 'https://myURL',
  data: {
    myData
  },
  headers: { 'Authorization': 'Bearer myToken' },
  rejectUnauthorized: false,
}, function (error, response, body) {
if(error){
  console.log('Error: ', error)
} else {
  console.log(body)
}
});

Если вы не хотите, чтобы TLS проверял весь проект узла установить process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...