Как отправить запрос с TLS 1.2 только с node.js внутри контейнера? - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь использовать внутреннюю службу HTTPS с узлом внутри контейнера и получаю следующую ошибку:

# node src/fetch.js 
Error: write EPROTO 140284687652672:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:

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

Но если я запускаю точно такой же код вне контейнера (на моей машине), это просто работает нормально.

Я искал решение, но я все время обнаруживаю, что пытаюсь использовать и HTTP-сервис, используя HTTPS.

Дополнительно, это результат, если я запустите тот же URL, используя cURL внутри контейнера:

# curl https://my-internal-secure-service.com/apitra/v1/health --verbose
*   Trying 10.56.13.17...
* TCP_NODELAY set
* Connected to my-internal-secure-service.com (10.56.13.17) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
* Curl_http_done: called premature == 1
* stopped the pause stream!
* Closing connection 0
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

В разговоре с людьми, создавшими этот сервис, мне сказали, что сервис только с использованием TLS 1.2, но я понятия не имею, как укажите этот тип параметра с узлом.

Я нашел параметр secureProtocol (https://nodejs.org/api/tls.html#tls_tls_createsecurecontext_options) для TLS, и после попытки со значением TLSv1_2_method произошло то же самое.

Кто-нибудь знает, что здесь происходит?

Вот несколько версий:

  • Docker версия: 19.03.5, сборка 633a0ea
  • Docker состав: 1.25.4, сборка 8d5 1620a
  • Docker изображение: узел: 12.14.1
  • версия узла : 12.14.1.
  • ОС машины: macOS Catalina 10.15.3

И некоторые результаты nmap:

  • Внутри контейнера:
# nmap --script ssl-enum-ciphers -p 443 my-internal-secure-service.com

Starting Nmap 7.40 ( https://nmap.org ) at 2020-03-04 14:06 MST
Nmap scan report for my-internal-secure-service.com (10.56.13.17)
Host is up (0.00081s latency).
rDNS record for 10.56.13.17: mockservice.my-company.io
PORT    STATE SERVICE
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 88.22 seconds
  • А в моей машине:
# nmap --script ssl-enum-ciphers -p 443 my-internal-secure-service.com
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-04 14:07 MST
Nmap scan report for my-internal-secure-service.com (10.56.13.17)
Host is up (0.097s latency).

PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers:
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|     compressors:
|       NULL
|     cipher preference: server
|_  least strength: A

Nmap done: 1 IP address (1 host up) scanned in 3.07 seconds

PS Не знаю, важно ли это, но моя машина (MacBook Pro) подключена к точке доступа Wi-Fi Ma c Mini WiFi Ma c Mini подключен через корпоративную сеть через ethe rnet.

...