WebSocket 服务器不支持 SSL

2023-12-28

我有一个使用网络套接字的工作聊天应用程序。我想更进一步,在我的连接上启用加密,但是当我用 https 服务器切换 http 服务器时,我的连接开始失败。

我已经生成了一个在我的所有网站上使用的自签名证书(在同一 TLD 下,这意味着它是通配符证书)。我可以确认这是一个有效的证书,所以问题不应该存在。

这就是有效的(未加密)

var webSocketServer = require('websocket').server;
var http = require('http');

var server = http.createServer(function() {});
server.listen(webSocketsServerPort, function () {
    log("system", "Server is listening on port " + webSocketsServerPort);
});

var wsServer = new webSocketServer({
    httpServer: server
});

使用这个我现在可以连接到ws://my.domain:port.

这就是做的not work

var webSocketServer = require('websocket').server;
var http = require('https');
var fs = require('fs');

var server = http.createServer({
    key: fs.readFileSync("path/to/host.key"),
    cert: fs.readFileSync("path/to/host.pem")
});
server.listen(webSocketsServerPort, function () {
    log("system", "Server is listening on port " + webSocketsServerPort);
});

var wsServer = new webSocketServer({
    httpServer: server
});

使用此代码,服务器也会启动,我看到日志消息“服务器正在侦听..”,但是当我尝试连接时wss://my.domain:port无法建立连接。

我在浏览器中为证书添加了一个例外,因为我的客户端页面和 websocket 服务器地址位于相同的 tld 和子域下。

可能是什么问题呢?


仅添加您想要连接到 websocket 的站点作为例外是不够的。前往网站https://my.domain:port(websocket 地址)并将该位置添加为例外。 (这当然是 Firefox 中的必要步骤)

或者,您可以将证书管理器中的证书导入到当局.

Edit:我可以告诉你什么对我有用。

> openssl genrsa -out key.pem
> openssl req -new -key key.pem -out csr.pem
> openssl x509 -req -days 9999 -in csr.pem -signkey key.pem -out cert.pem

将通用名称设置为localhost

in main.js

var https = require('https');
var ws = require('websocket').server;
var fs = require('fs');

var options = {
    key:fs.readFileSync('key.pem'),
    cert:fs.readFileSync('cert.pem')
};

var server = https.createServer(options,
    function(req,res){res.writeHeader(200);res.end();});
server.listen(8000);
var wss = new ws({httpServer:server});

wss.on('request',function(req){
    req.on('requestAccepted',function(conn){
        conn.on('message',function(msg){
            conn.send(msg.utf8Data + " received");
        });
    })
    req.accept(null,req.origin);
});

然后在浏览器(Firefox)中https://localhost:8000(添加证书作为例外)

var ws = new WebSocket('wss://localhost:8000/')
ws.onmessage = function(msg){console.log(msg.data)}
ws.send("test")

并收到test received.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebSocket 服务器不支持 SSL 的相关文章

随机推荐

  • Gradle 未使用 ext:pom 导入依赖项

    我想要导入库 org geotools 添加原料compile group org geotools name geotools version 16 1 or compile group org geotools name geotool
  • 如何将 HTML 字符串绑定到 Android 应用程序中的 Web 视图?

    我目前有一个 android TextView 它绑定到一个可能包含或不包含 HTML 的字符串
  • 如何使异步 Dart 调用同步?

    我正在为一家德国公司评估 Dart 将各种 Java 程序移植到 Dart 中 并对结果进行比较和分析 在浏览器中 Dart 轻而易举地获胜 对于服务器软件性能似乎是一个严重的问题 参见我的这个问题 https stackoverflow
  • 如何根据支持 bean 条件有条件地显示 p:dialog

    有什么方法 或正确的方法 有条件的根据支持 bean 条件在 primefaces 上显示对话框 代码如下所示
  • 如何将 1400-1500 转换为下午 2 点至下午 3 点?

    我正在从服务接收表示时隙的数据作为字符串 格式如下 1500 1600 这意味着下午 3 点到 4 点 我将列出这些内容 例如 1200 1300 1300 1400 1400 1500 我必须在用户界面中将其表示为 中午 12 点至下午
  • `format()` 和 `str()` 有什么区别?

    gt gt gt format sys stdout lt io TextIOWrapper name
  • '=' sp_executesql 附近的语法不正确

    我需要delete all rows在一些table where值是空字符串 我有多个名称相似的表 我尝试执行字符串中的sql语句 DECLARE sql AS NVARCHAR MAX DECLARE emptyValue AS NVAR
  • 如何使ajax请求异步?

    我想让一些ajax请求异步 比如两个Ajax 第一个Ajax不需要完成 第二个请求就可以发生 ajax url urlone async true complete function console log 1 type post data
  • 创建静态库并使用 premake 链接到它

    我目前正在尝试学习如何使用 premake 4 以便将其应用到 OpenGLsdk http www opengl org sdk 我目前正在尝试制作一个 Visual Studio 2010 解决方案 该解决方案构建 2 个项目 一个是静
  • 如何触发 Tab 键事件?

    How do we fire a tab key pressed event deliberately in Java I also want to know how to fire a Shift tab key pressed even
  • 使用 Angular 7 上传文件时,表单数据并不总是在 Chrome 中发送

    当我的 Angular 7 应用程序使用 Angular file 上传文件时 表单数据并不总是通过 Chrome macOS 发送 我使用 Firefox 或 Safari 没有任何问题 至少上次发生这种情况时 刷新 Chrome F5
  • java中的try/catch与null检查

    有时我面临必须编写一段这样的代码 通常它有更多嵌套的 if 和更复杂的结构 但对于示例来说就足够了 public void printIt Object1 a if a null SubObject b a getB if b null S
  • 视频在回溯时卡住 (C++) (QT) (libvlc)

    我正在使用 libvlc 使用 QT 4 在我的 GUI 应用程序上播放视频 当我向前搜索视频时 它工作正常 但是当我向后搜索视频时 它会卡住 我的意思是帧不会改变 而我的回调函数是 videopostrender没有接到任何电话 void
  • 如何混合(合并)视频和音频,以便音频在输出视频中循环,以防持续时间太短?

    背景 我需要将视频文件和音频文件合并为一个视频文件 以便 输出视频文件的持续时间与输入视频文件的持续时间相同 输出文件中的音频将仅是输入音频文件的音频 如果太短 则会循环到最后 如果需要可以在最后停止 这意味着一旦音频播放完毕而视频尚未播放
  • PHP cli 命令行 safe_mode 限制

    我正在使用 Kohana 框架 3 0 9 它生成每日日志 如果日志文件是在 CRON 运行脚本的前一天制作的 我想邮寄日志文件 但经过几天的尝试 我无法弄清楚如何在 PHP CLI 模式中推迟 safe mode 当我在网络上运行脚本时
  • Android任务管理器源码

    我想知道是否有任何开源 Android 任务管理器 流程管理器 流程细节器 项目可供我查看 我正在为我的大学项目开发 一个应用程序 它将帮助我了解寻找一个好的任务管理器 有谁知道一些开源项目 我可以在其中阅读或查看源代码 我不需要下载源 谢
  • Rails,选择助手,添加样式

    我正在尝试做这样的事情 select model attribute style gt some style Add style to the select helper在 Rails 中 但它不起作用 来自文档 http api ruby
  • 有条件申请课程的最佳方式是什么?

    假设您有一个在 a 中呈现的数组ul与li对于每个元素和控制器上的一个属性 称为selectedIndex 将课程添加到的最佳方式是什么li与索引selectedIndex在 AngularJS 中 我目前正在 手工 复制li代码并将该类添
  • 我如何像 Cocos2D 一样通过 SpriteKit 倾斜/剪切精灵?

    在Cocos2D x中 CCNode类提供了 skewX 和 skewY 来让我对精灵进行一些扭曲 但是 我在SpriteKit的SKNode中找不到类似的映射 我的游戏使用Flash移植骨骼动画 其中精灵的定位 缩放 旋转和剪切的配置将被
  • WebSocket 服务器不支持 SSL

    我有一个使用网络套接字的工作聊天应用程序 我想更进一步 在我的连接上启用加密 但是当我用 https 服务器切换 http 服务器时 我的连接开始失败 我已经生成了一个在我的所有网站上使用的自签名证书 在同一 TLD 下 这意味着它是通配符