【发布时间】:2021-07-05 14:01:33
【问题描述】:
您好,很抱歉我的第一个堆栈溢出问题,所以我会尽力而为。我已经阅读了数十个相关问题,但似乎没有一个能够为我提供答案。
我最近开始使用 Node.js,因为我需要 websockets 来实现我网站上的某些功能,而 Node.js 似乎是流行的选择。我的网站通过 LetsEncrypt 获得了 SSL 证书,因此我已将证书和密钥文件添加到我的 WSS 配置文件“index.js”中,如下所示:
const fs = require("fs");
const https = require("https");
const WebSocket = require("ws");
const server = https.createServer({
cert: fs.readFileSync("/etc/letsencrypt/live/my_domain.com/cert.pem"),
key: fs.readFileSync("/etc/letsencrypt/live/my_domain.com/privkey.pem"),
requestCert: true,
rejectUnauthorized: false
});
const wss = new WebSocket.Server({ server });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
server.listen(8080, () => console.log("Listening on port :8080"))
当我通过终端在我的服务器上节点 index.js 时,我没有收到任何错误,并且它按预期输出:'Listening on port :8080'。然后,当我导航到一个简单的 index.html 页面时,我测试它是否使用以下代码:
<script>
const socket = new WebSocket("wss://my_domain.com:8080");
socket.addEventListener("open", function (event) {
console.log("We are connected!");
ws.send("Hi! I've connected!");
});
socket.addEventListener("message", function (event) {
console.log(e.data);
});
</script>
我只是在浏览器中收到以下控制台错误:
火狐:
Firefox 无法与位于 wss://my_domain.com:8080/ 的服务器建立连接。
铬:
到 'wss://my_domain.com:8080/' 的 WebSocket 连接失败: (匿名)@index.html:60
我在网络检查器工具中看不到任何其他详细信息,但如果有什么我可以提供的额外说明/上下文,请询问,我会尽快回复。
编辑:This article 被建议但似乎没有解决问题:在他们的问题中,它适用于 chrome 但不适用于 Firefox,我的尚未在任何浏览器中工作。同样在该帖子的答案中,他们建议转到“同一服务器上的正常页面”以接受证书,但我似乎无法在我的任何页面上触发对话框。
我也认为我的证书不是自签名的,因为所有这些帖子似乎都是,但老实说我不知道:
证书信息截图
【问题讨论】:
-
@James No- 在他们的问题中,它可以在 chrome 中运行,但不能在 Firefox 中运行,我的还没有在任何浏览器中运行。同样在该帖子的答案中,他们建议转到“同一服务器上的正常页面”以接受证书,但我似乎无法在我的任何页面上触发对话框。
-
这可能表明存在问题 - 访问 websocket 端点时,您的浏览器将不接受服务器上的 SSL 证书。我对该错误消息所做的所有谷歌搜索都指向证书。
-
@James 所有这些文章都指的是自分配证书。老实说,我对 SSL 证书了解不多,但我刚刚检查了我的证书详细信息,它显示颁发者为 Let's Encrypt。这是否意味着它不是自分配的,因此所有这些答案都无关紧要?
-
Let's encrypt 不是自签名的。在浏览器中访问
https://my_domain.com:8080/时是否遇到类似错误?
标签: javascript node.js ssl websocket https