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服务器.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服务器.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

关于HTTPS的Node.js 10有什么变化?我怀疑我必须更改SSL设置,但我确定如何更改。


更新:

尝试访问 HTTP (节点.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文件。

问题是客户端未广播对服务器所需的密码套件或扩展的支持。

此问题的一些常见解决方案可能是: - 如果使用 ECC,服务器需要启用支持的曲线扩展。 使用 "--enable-support curves" 编译 wolfSSL 进行解析。 - 为了安全起见,wolfSSL 默认禁用静态密钥密码套件。 请参阅自述文件顶部的说明,了解有关重新启用静态密钥密码套件的说明(如果您的服务器需要(。

这是讨论您收到的错误的线程。希望这可以解决您的问题

验证 curl 发送的标头,您可以使用 -v 参数。

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

也 在节点中,

只需在 req.end(( 之后 console.log(req._headers( 并比较您的标头以进一步解决问题。我也要求尝试 wireshark (http://www.wireshark.org/( 进行 SSL 连接测试。

因为它正在通过 --不安全工作,但您需要知道原因。

--不安全的

  • (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 worldn");
});
app.listen(8000);
https.createServer(options, app).listen(8080);

相关内容

  • 没有找到相关文章

最新更新