提问人:san 提问时间:9/4/2023 最后编辑:Steffen Ullrichsan 更新时间:9/4/2023 访问量:45
节点 js https net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH [复制]
node js https net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH [duplicate]
问:
我实现了以下代码,使节点js在https上运行
const https = require('https');
const options = {
key: fs.readFileSync('apache key file path.key', "UTF-8"),
crt: fs.readFileSync('apache crt file path.crt', "UTF-8")
}
const httpsvr = https.createServer(options, (req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('TEST HTTPS\n');
});
const io = require('socket.io')(httpsvr);
httpsvr.listen(8443);
io.on("connect_error", (err) => {
console.log('connect error ' + err.message );
});
io.on('connection', function (socket) {
socket.on('TestNodeEvent', function (data) {
console.log(data);
console.log('io8443 connected');
});
});`
这将运行 https 服务器。但客户端无法建立 socket.io 连接。因此广播不会发生
socket = io('https://xxx.xxx.xxx.xx:8443');
socket.on('testupdate', function (data) `
我尝试向其他用户发送页面刷新信号,但套接字 io 连接不正确。 我从浏览器收到以下错误
Chrome - net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Firefox -
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://xxx.xxx.xxx.xx:8443/socket.io/?EIO=4&transport=polling&t=OfUXCGt. (Reason: CORS request did not succeed). Status code: (null).
`
Node JS version - v14.21.3
socket.io - 4.2.0
socket.io-client - 4.2.0
我想让页面刷新发生在其他用户身上,而一个人使用应该从其他用户那里选择的特定选项
这就是我在后端执行 culr 和 openssl 时得到的
openssl s_client -connect xxx.xxx.xxx.xxx:8443
CONNECTED(00000003)
139917842872128:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl/record/rec_layer_s3.c:1544:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 289 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
答:
-1赞
Anant Kumar
9/4/2023
#1
如果你在 ubuntu 上使用 Apache 或 nginx,你应该修改你的代码
const https = require('https');
sudo certbot --apache
或者,如果您使用的是 nginx
sudo certbot --nginx
评论
0赞
Steffen Ullrich
9/4/2023
我看不出这是如何回答这个问题的。
0赞
Anant Kumar
9/4/2023
对不起,如果你没有得到答案,实际上我的意思是说,如果你正在创建HTTPS服务器,那么你还需要使用Certbot添加和ssl,然后你可以通过HTTPS访问它,一般来说,当你从HTTPS服务器在HTTP上请求时,会发生跨域请求错误 出于测试目的 您可以从浏览器禁用安全检查
0赞
san
9/4/2023
嗨@AnantKumar我无法发送 http 请求,因为 chrome 不允许它 socket = io('xxx.xxx.xxx.xx:8443');这在 http 上工作正常,但是当我实现 https 时,我可以看到节点 js 请求进入 linux 服务器但没有日志
0赞
Steffen Ullrich
9/4/2023
@AnantKumar:OP 在这里没有使用反向代理(只需检查端口) - 所以关于 apache 和 nginx 的任何事情都没有意义。所以 OP 似乎也已经拿到了证书——所以关于 certbot 的任何事情在这里也无关紧要。
0赞
san
9/4/2023
大家好,当我使用 ps -ef|grep 节点根 1378 1 0 Aug19 时?00:00:00 /usr/sbin/mcelog --ignorenodev --daemon --foreground root 3880627 1 3 15:10 ?00:00:42 /usr/bin/node /usr/wasp11/source/prod/node/node_start.js root 3901301 3407795 0 15:31 pts/3 00:00:00 grep --color=auto 节点
评论