安全的 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的主要内容,如果未能解决你的问题,请参考以下文章