我有简单的Node.js HTTPS服务器
{% load static i18n humanize accounts cache %}
{% get_current_language as LANGUAGE_CODE %}
{% cache 3600 user_info user.pk LANGUAGE_CODE size %}
<a class="user-info" href="{{ user.get_absolute_url }}">
<div class="user-avatar-wrapper">
<span class="online-status {{ user.online_status }}"></span>
{% if size %}
{% avatar user size class="avatar" id="user_avatar" %}
{% else %}
{% avatar user 40 class="avatar" id="user_avatar" %}
{% endif %}
</div>
<span>
{{ user }}
<small>{{ user.groups.all|join:", " }}</small>
</span>
</a>
{% endcache %}
我在嵌入式系统上使用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
当我使用Node.js而不是版本10时-一切正常。
在 Node.js v8.2.1
上运行的HTTPS服务器# 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 v10.1.0
上运行的HTTPS服务器# 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: */*
Node.js 10在HTTPS方面发生了哪些变化?我怀疑我必须更改SSL设置,但是我确定如何更改。
更新:
尝试访问HTTP(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
Wireshark捕获了pcap file。
答案 0 :(得分:2)
问题是客户端没有广播对服务器所需的密码套件或扩展的支持。
一些常见的解决方案可能是: -如果使用ECC,则服务器需要启用“支持的曲线扩展”。使用“ --enable-supported curves”编译wolfSSL进行解析。 -wolfSSL为安全起见默认禁用了静态密钥密码套件。如果您的服务器需要静态密钥密码套件,请参阅自述文件顶部的注释,以获取有关重新启用静态密钥密码套件的说明。
Here is the Thread which discuses the error which you have received。希望这能解决您的问题
答案 1 :(得分:0)
验证curl发送的标头,可以使用-v参数。
curl -vIX“ https://10.43.11.128:3333/”
也 在节点中
只需在req.end()之后添加console.log(req._headers)并比较您的标头以进一步解决问题。我还请求尝试使用Wireshark(http://www.wireshark.org/)进行ssl连接测试。
由于--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);