Как исправить ошибку «EPROTO» после обновления версии Node - PullRequest
0 голосов
/ 24 мая 2019

Следующий код работает на v10.15.3 версии Node:

const { post } = require('request');

post({
  url: 'https://cidadao.sinesp.gov.br/sinesp-cidadao/mobile/consultar-placa/v4',
  body: '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<v:Envelope xmlns:v=\"http://schemas.xmlsoap.org/soap/envelope/\">\n  <v:Header>\n    <b>LGE Nexus 5</b>\n    <c>ANDROID</c>\n    <d>v4</d>\n    <e>4.3.2</e>\n    <f>98.193.54.223</f>\n    <g>514650d8dba4784ed08b5a029583576361a50bc5</g>\n    <h>-3272.3179572637086</h>\n    <i>940.839492700698</i>\n    <j/>\n    <k/>\n    <l>2019-05-24 10:24:35</l>\n    <m>8797e74f0d6eb7b1ff3dc114d4aa12d3</m>\n  </v:Header>\n  <v:Body xmlns:n0=\"http://soap.ws.placa.service.sinesp.serpro.gov.br/\">\n    <n0:getStatus>\n      <a>LSU3J43</a>\n    </n0:getStatus>\n  </v:Body>\n</v:Envelope>',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'User-Agent': 'SinespCidadao / 3.0.2.1 CFNetwork / 758.2.8 Darwin / 15.0.0',
    Host: 'cidadao.sinesp.gov.br'
  },
}, (err, httpResponse, body) => {
  if (err) return console.error(err);
  console.log(JSON.stringify(httpResponse));
});

Но после обновления до v12.2.0 или выше я получил следующую ошибку:

Error: write EPROTO 17432:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:c:\ws\deps\openssl\openssl\ssl\statem\statem_lib.c:1922:

    at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:83:16) {
  errno: 'EPROTO',
  code: 'EPROTO',
  syscall: 'write'
}

Как я могу это исправить?

1 Ответ

3 голосов
/ 27 мая 2019

Поскольку тот же код работает на Node.js v10.15.3, но не работает на v12.2.0, а сообщение об ошибке указывает на «неподдерживаемый протокол», наиболее вероятная основная причина этой проблемы: минимальная поддерживаемая версия TLS вNode.js 10 равен TLSv1.0, но с v11.4.0 он повышается до TLSv1.2 ( tls.DEFAULT_MIN_VERSION ).Я подозреваю, что сертификат cidadao.sinesp.gov.br подписан с TLSv1.0, который работает на Node.js v10.15.3, но не на v12.2.0.

Чтобы Node.js мог принять TLSv1.0, вы можетепроцесс lauch Node.js с опцией --tls-min-v1.0.

Я провел эксперимент, и он хорошо работает:

enter image description here

Кстати,сертификат cidadao.sinesp.gov.br сейчас недействителен.Срок его действия истек с мая 2018 года - как упоминалось в ФП, запрос следует отправлять из Бразилии (или через прокси-узел в Бразилии).

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