ax ios Ошибка SSL с узлом 12: процедуры SSL: ssl_choose_client_version: неподдерживаемый протокол - PullRequest
1 голос
/ 24 января 2020

У меня проблема с axios и Узлом 12. Поскольку я не уверен, что эта ошибка связана только с axios, я последовал совету спросить о SO, а не открывать ошибку на axios ' GitHub.

Вот код, который я пытаюсь запустить:

const axios = require('axios')

axios({
  method: 'get',
  url: 'https://www.colisprive.com/moncolis/pages/detailColis.aspx?numColis=12345',
  responseType: 'text'
}).then((response) => {
  console.log(response)
})

Этот код не работает на узле 12 со следующей ошибкой:

Error: write EPROTO 140121214769024:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../deps/openssl/openssl/ssl/statem/statem_lib.c:1929:

    at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:87:16)

Тот же код, запущенный для узла 11, не выдает никакой ошибки.

Когда я curl -v, я получил это:

*   Trying 91.208.224.32:443...
* TCP_NODELAY set
* Connected to www.colisprive.com (91.208.224.32) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: serialNumber=391029345; jurisdictionC=FR; businessCategory=Private Organization; C=FR; postalCode=13290; ST=Bouches-du-Rh�ne; L=AIX EN PROVENCE; street=1330 AV J R G GAUTIER DE LA LAUZIERE; street=ZI MILLES EUROPARC PICHAURY; O=COLIS PRIVE SAS; OU=0002 391029345; CN=www.colisprive.com
*  start date: Sep  3 00:00:00 2018 GMT
*  expire date: Sep  2 23:59:59 2020 GMT
*  subjectAltName: host "www.colisprive.com" matched cert's "www.colisprive.com"
*  issuer: C=GB; ST=Greater Manchester; L=Salford; O=COMODO CA Limited; CN=COMODO RSA Extended Validation Secure Server CA
*  SSL certificate verify ok.
> GET /moncolis/pages/detailColis.aspx?numColis=12345 HTTP/1.1
> Host: www.colisprive.com
> User-Agent: curl/7.65.3
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Cache-Control: private
< Content-Type: text/html; charset=utf-8
< Location: /moncolis/Default.aspx?numColis=12345&cp=
< Server: Microsoft-IIS/7.5
< Set-Cookie: ASP.NET_SessionId=eln3cq143d35lfj5tpqkkwcg; path=/; HttpOnly
< X-Powered-By: Colis Priv�
< Date: Fri, 24 Jan 2020 13:48:35 GMT
< Content-Length: 162
< 
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/moncolis/Default.aspx?numColis=12345&amp;cp=">here</a>.</h2>
</body></html>
* Connection #0 to host www.colisprive.com left intact

Как видите, он выдает 302 Found с заголовком Location, указывающим на другую конечную точку. Я согласен, он должен ответить 301 Moved, чтобы указать, что документ перемещен, но это не тот случай, и он обрабатывается, как ожидается, axios на узле 11 (выборка конечной точки в заголовке Location).

Я видел, что Node 12 теперь включает TLS 1.3 по умолчанию, так что это может быть связано с этим…

Кроме того, в заголовке X-Powered-By есть неизвестный символ.

Я пытался:

  • воспроизвести эту проблему с сервером express, всегда отвечающим 302 Found с одинаковыми заголовками: работает как положено
  • получить другую .aspx веб-страницу с axios: работает как положено

Ответы [ 2 ]

5 голосов
/ 24 января 2020

Проблема не только в axios, но и в got.

Node.js 12 Настройки TLS по умолчанию теперь более строги. Сайт не поддерживает TLS v1.2. Узел 12 по умолчанию нужен 1.2.

Вы можете изменить это с помощью флага командной строки (--tls-min-v1.0) при запуске приложения.

что-то вроде этого

node --tls-min-v1.0 app.js
0 голосов
/ 05 февраля 2020

Добавление параметра "--tls-min-v1.0" также работает с nodemon. Спасибо!

...