it-roy-ru.com

Node.js 10 HTTPS сервер отклоняет соединения

У меня есть простой Node.js HTTPS сервер

const https = require('https');
const fs = require('fs');

const config = {
  key: fs.readFileSync('cert/server-key.pem'),
  cert: fs.readFileSync('cert/server-crt.pem'),
  ca: fs.readFileSync('cert/ca-crt.pem'),
};

const server = https.createServer(config, ((req, res) => {
  console.log('Got request');

  res.end();
}));

server.listen(3333);

Я использую curl во встроенной системе.

# curl -V
curl 7.52.1 (arm-unknown-linux-gnu) libcurl/7.52.1 wolfSSL/3.9.8
Protocols: file ftp ftps http https smtp smtps telnet tftp 
Features: IPv6 Largefile SSL UnixSockets  

Когда я использую Node.js, отличный от версии 10, все работает хорошо.

HTTPS-сервер, работающий на Node.js v8.2.1

# curl -k -v "https://10.43.11.128:3333/"
*   Trying 10.43.11.128...
* TCP_NODELAY set
* Connected to 10.43.11.128 (10.43.11.128) port 3333 (#0)
* SSL connected
> GET / HTTP/1.1
> Host: 10.43.11.128:3333
> User-Agent: curl/7.52.1
> Accept: */*

HTTPS-сервер, работающий на Node.js v10.1.0

# curl -k -v "https://10.43.11.128:3333/"
*   Trying 10.43.11.128...
* TCP_NODELAY set
* Connected to 10.43.11.128 (10.43.11.128) port 3333 (#0)
* SSL_connect failed with error -313: revcd alert fatal error
* Curl_http_done: called premature == 1
* Closing connection 0
curl: (35) SSL_connect failed with error -313: revcd alert fatal error

Что изменилось в Node.js 10 по отношению к HTTPS? Я подозреваю, что мне придется изменить настройки SSL, но я уверен, как.


ОБНОВЛЕНИЕ:

Попытка получить доступ к HTTP (Node.js v10.1.0)

# curl --insecure -v "10.43.11.128:3333/"
*   Trying 10.43.11.128...
* TCP_NODELAY set
* Connected to 10.43.11.128 (10.43.11.128) port 3333 (#0)
> GET / HTTP/1.1
> Host: 10.43.11.128:3333
> User-Agent: curl/7.52.1
> Accept: */*
> 
* Curl_http_done: called premature == 0
* Empty reply from server
* Connection #0 to Host 10.43.11.128 left intact
curl: (52) Empty reply from server

Захваченный Wireshark файл pcap .

13
m1ch4ls

Проблема заключается в том, что клиент не передает поддержку набора шифров или расширения, которые требуются серверу.

Некоторые общие решения этой проблемы могут быть: - Если используется ECC, сервер требует, чтобы было включено расширение поддерживаемых кривых. Скомпилируйте wolfSSL с "--enable-поддерживаемыми кривыми" для разрешения .- В wolfSSL статические ключи шифрования отключены по умолчанию для безопасности. См. Примечание в верхней части README для получения инструкций по повторному включению наборов шифров со статическим ключом, если они требуются вашему серверу.

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

2
Akhil Surapuram

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

curl -vIX " https://10.43.11.128:3333/ "

также В узле, 

просто console.log (req._headers) после req.end () и сравните ваш заголовок для дальнейшего решения проблемы. Также я прошу попробовать wireshark ( http://www.wireshark.org/ ) для подключения ssl тестирование.

Как это работает --insecure, но вам нужно знать причину.

--insecure

  • (SSL) Эта опция явно позволяет curl выполнять «небезопасно» SSL-соединения и переводы. Все SSL-соединения предпринимаются быть защищенным с помощью установленного пакета сертификатов CA по умолчанию. Это делает все соединения считающимися «небезопасными» терпеть неудачу, если не используется -k, --insecure.

Также вы можете попробовать это 

const https = require("https"),
  fs = require("fs");

const options = {
  key: fs.readFileSync("/cert/server-key.pem"),
  cert: fs.readFileSync("/cert/server-cert.pem")
};

const app = express();

app.use((req, res) => {
  res.writeHead(200);
  res.end("hello world\n");
});

app.listen(8000);

https.createServer(options, app).listen(8080);
0
this_is_om_vm