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');
我正在尝试使用 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');