socket_read('wss://host'') returns 我无法解密的加密缓冲区

socket_read('wss://host'') returns an encrypted buffer that I can't decrypt

我正在尝试使用 PHP 制作一个简单的套接字。至此socket开始接受客户端的请求,但是我从客户端收到的buffer是加密的,

这是我的 PHP,在服务器上 运行 $ php file.php:

$user_socks = array(0 => false);

$socket = socket_create_listen(8080);
socket_set_nonblock($socket);

while(true){
    $new_conn = socket_accept($socket);

    if(!$new_conn && !$user_socks[0])
        continue;

    if($new_conn && !$user_socks[0])
        $user_socks[0] = $new_conn;

    $buffer = socket_read($user_socks[0], 2048);
        var_dump(mb_convert_encoding($buffer, 'ASCII', 'UTF-8'));
}

我只是 运行在 Firebug 控制台中连接这行 JS 以尝试连接到脚本:

var test = new WebSocket('wss://192.168.2.253:8080');

有人知道我如何解密这段文字吗?

经过一些测试,我弄清楚了如何让它工作。解决方案原来是使用 stunnel 作为守护进程来为网络套接字提供加密。

以下是实现此功能所需的所有额外部分:

Apache VHost 配置

<VirtualHost *:443>
    <IfDefine PROXY>
        SSLProxyEngine On
        ProxyPass "/wss/" "wss://127.0.0.1:4430"
        ProxyPassReverse "/wss/" "wss://127.0.0.1:4430"
    </IfDefine>
</VirtualHost>

Stunnel 配置

cert = /path_to_key.pem
key = /path_to_key.pem

[wss]
accept = 4430
connect = 8080

然后使用以下命令连接到加密的网络套接字

var test = new WebSocket('wss://hostname.tld/wss');