3

我正在尝试使用wss://客户端的 -protocol 将我的 PHP WebSocket 库升级到 SSL。但是,我发现自己在试图弄清楚 a)如何设置服务器套接字,以及 b)如何解码传入的消息时不知所措。这是我目前对前者的尝试:

$context = stream_context_create();

// local_cert must be in PEM format
stream_context_set_option($context, 'ssl', 'local_cert', $pemFilePath);
// Pass Phrase (password) of private key
stream_context_set_option($context, 'ssl', 'passphrase', $pemPassPhrase);
stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
stream_context_set_option($context, 'ssl', 'verify_peer', false);

$serverSocket = stream_socket_server('ssl://'.$host.':'.$port, $errNo, $errStr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context);

但是,当使用 SSL 作为服务器协议时,客户端似乎没有发送任何消息,并且在使用 tcp 时,我得到了奇怪的加密数据,尽管我猜测由于我提供了选项,它会被神奇地解密到流上下文。

我究竟做错了什么?

4

1 回答 1

4

我在我们的实现中遇到了同样的问题,并找到了一个很好的解决方法。将您的 websocket 服务器放在任何防火墙端口上,并从安全端口端口建立隧道连接。您可以使用具有如下配置的stunnel :

[websockets]
accept = 8443
connect = 8080

这样,stunnel 完成所有安全性,而您的 websocket 服务器完成所有 websockets。赢!

于 2013-05-07T17:33:49.877 回答