在安全环境中使用Ratchet WebSockets无效

idfiyjo8  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(127)

我 在 一 个 基于 Windows 的 服务 器 项目 中 使用 了 Ratchet WebSocket , 该 项目 完全 在 一 个 不 安全 的 环境 中 工作 。 也 就是 说 , 当 我 将 浏览 器 导航 到 http://www.example.com 并 使用 ws:// 在 端口 8686 上 连接 到 websocket 服务 器 时 , 一切 都 非常 顺利 。
服务 器 不 通过 IIS 运行 - 而是 通过 命令 提示 符 中 的 php.exe 执行 , 如下 所 示 。

php wsocket-server.php [...parameters...]

中 的 每 一 个
但是 , 如果 运行 Ratchet 服务 器 并 尝试 使用 wss://https://www.example.com 连接 , 浏览 器 将 无法 连接 到 websocket 服务 器 , 尽管 服务 器 启动 正常 且 不 安全 的 站点 通过 ws:// 连接
现在 , 我 意识 到 我 需要 使用 一些 额外 的 代码 来 包含 我 的 SSL 文档 。

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;

$websocket_server = new WsServer();

if ($site_secure){
   //RUN WSS (SECURE) SERVER
    $options = [
        'local_cert'        => 'c:\inetpub\ssl\2c6fa1928847451c.crt',
        'local_pk'          => 'c:\inetpub\ssl\2c6fa1928847451c.key',
        'allow_self_signed' => true,
        'verify_peer'       => false
    ];

    $loop = React\EventLoop\Factory::create();
    $websocket_server->enableKeepAlive($loop);
    $app = new HttpServer($websocket_server);

    $insecure_websockets = new \React\Socket\Server('0.0.0.0:'.$port, $loop);
    $secure_websockets = new \React\Socket\SecureServer($insecure_websockets , $loop, $options);
    $secure_websockets_server = new \Ratchet\Server\IoServer($app, $secure_websockets, $loop);

    $secure_websockets_server->run();
}else{    
   //RUN WS (INSECURE) SERVER
    $http_server = new HttpServer($websocket_server);
    $server = IoServer::factory($http_server, $port);
    $websocket->log ("Initializing ".(($site_secure) ? "Secure " : "Insecure ")."Server ($port)");
    $server->run();
}

格式

我 所 尝试 的

  • 我 已经 确保 正确 的 端口 在 windows 防火墙 中 全部 打开 。
  • 我 已 使用 netstat 确保 端口 上 没有 其他 侦听
  • 我 试 过 使用 nginx , 在 最 低 限度 上 。 如果 可能 的 话 , 我 宁愿 不 使用 这种 方法 , 并且 在 它 启动 时 有 一些 最初 的 问题 , 所以 我 没有 在 这个 时候 100% 地 投入 它 。 理想 的 情况 下 , 我 想 使用 棘轮 的 原生 能力 。
  • 我 在 这里 和 其他 地方 都 搜索 过 其他 类似 的 帖子 , 比如 this
  • 我 已经 尝试 了 许多 不同 的 端口 , 甚至 是 我 在 不 安全 连接 中 使用 的 8686 端口

我 希望 有人 能 帮 我 解决 一 个 困扰 了 我 两 周 的 问题 。 在 这 一 点 上 , 我 觉得 我 只是 在 尝试 一些 东西 , 我 可能 是 在 循环 编码 自己 。
先 谢谢 你 了 。

daolsyd0

daolsyd01#

浏览器 * 永远 * 不会连接到 * 任何 * 运行在端口465上的东西,尤其是WebSocket。
建立WebSocket连接是根据Fetch标准指定的。因此,在Fetch标准中可以找到对该端口的特定排除:
如果端口列于下表的第一列中,则该端口是错误端口
| 端口|典型服务|
| - -|- -|
| 一个人。|一个人。|
| 四百六十五|提交|
| 一个人。|一个人。|
现在,为什么有些端口被列入黑名单?这是为了防止跨协议脚本攻击,正如曾经演示过的那样(警告:NSFW链接)against Firefoxagainst Safari。端口465已经(有时仍然)用于(纯)TLS上的SMTP,因此在这种情况下,XPS攻击可能会诱使浏览器代表用户发送邮件。阻止这些端口是为了防止这种攻击。当然,当服务在非标准端口上运行时,所有的赌注都是失败的。
要使服务在浏览器中可用,您只需更改端口号。

相关问题