在安全环境中使用 Ratchet WebSocket 不起作用

问题描述 投票:0回答:1

我在一个基于 Windows 的服务器项目中使用 Ratchet WebSocket,该项目完全在不安全的环境中工作。也就是说,当我将浏览器导航到

http://www.example.com
并在端口 8686 上使用
ws://
连接到 websocket 服务器时,一切都运行得非常好。

服务器不通过 IIS 运行 - 而是通过命令提示符中的 php.exe 执行,如下所示。

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

但是,如果运行 Ratchet 服务器并尝试使用

https://www.example.com
wss://
连接,则浏览器根本无法连接到 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% 致力于它。理想情况下,我想使用 Ratchet 的原生能力。
  • 我在这里和其他地方搜索过其他类似的帖子,例如this
  • 我尝试了许多不同的端口,甚至与我在不安全连接中使用的相同的8686

我希望有人能帮助我解决一个困扰我两周的问题。在这一点上,我觉得我只是在尝试一些事情,而且我可能会在圈子里编码自己。

提前谢谢您。

ssl websocket ratchet
1个回答
0
投票

嗯,我不是 100% 确定,但马上看起来 $site_secure 是未定义的。我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.