安全的 WebSocket 和 PHP

Posted

技术标签:

【中文标题】安全的 WebSocket 和 PHP【英文标题】:Secure WebSocket and PHP 【发布时间】:2014-05-15 16:05:06 【问题描述】:

我有一个带有 IIS 和 php (5.5.12) 的 Windows 2012 R2 服务器。

我正在尝试制作一个(安全的)WebSocket 服务器。所以,我做了这个:

$host = 'ssl://127.0.0.1'; // host
$port = '8080'; // port

//Create TCP/IP sream socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);

socket_bind($socket, 0, $port);

socket_listen($socket);

当我连接到 ws:// 并且收到正确的标头时,一切正常:

GET /server.php HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: site.url:8080
Origin: https://site.url
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: MwqZ0uVuheQaS3ks7EJARQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-d
eflate-frame
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (Khtml, like
Gecko) Chrome/34.0.1847.131 Safari/537.36

但是当我尝试使用 wss:// 连接时……我收到了一些奇怪的东西:

▬♥☺ ø☺  ù♥☺¶P↓ÚðÙ±s÷╠Þ´▲è♣ÖaN?uüEg´¯§òñÞ=¿§  *└
└       └‼└¶└↕└└◄ 3 2 E 9 8 ê ▬ / A 5 ä
 ♣ ♦☺  D   ↑ ▬  ‼         site.url  ☺ ☺
 ♠ ↨ ↑ ↓ ♂ ☻☺  #  3t   ♣ ♣☺

而且我不能握手……

是不是我做错了什么?

感谢您的帮助,抱歉英语不好。

【问题讨论】:

是的,您会获得 ssl 加密数据。这很正常。这里需要先解密ssl才能读取数据。 您可能会为此考虑另一种服务器语言,我相信 nodejs 在网络套接字中变得流行。 PHP 进程仍然可以通过...调用进程 【参考方案1】:

尝试改用stream sockets 和setting the stream context options。此外,您可能想使用 tls:// 而不是 ssl://

【讨论】:

以上是关于安全的 WebSocket 和 PHP的主要内容,如果未能解决你的问题,请参考以下文章

多用户的春天WebSocket安全问题,怎么解决

WebSocket通信协议基础原理与潜在安全威胁

WebSocket通信协议基础原理与潜在安全威胁

javascript客户端和netty服务器之间的安全websocket连接

Firefox Websocket 安全问题

弹簧 websocket 没有弹簧安全