在本文中,我们将为您详细介绍使用SecureWebsocket和PHP–加密握手的相关知识,并且为您解答关于websocket数据加密的疑问,此外,我们还会提供一些关于html5-本质就是websoc
在本文中,我们将为您详细介绍使用Secure Websocket和PHP – 加密握手的相关知识,并且为您解答关于websocket数据加密的疑问,此外,我们还会提供一些关于html5 - 本质就是websocket的客户端,php Websocket 怎么接收数据、HTML5 websockets与PHP websockets vs node.js websockets?、IE11 对 websocket 报 SecurityError 问题、javascript – WebSocket握手期间出错:PHP的’Sec-WebSocket-Accept’标头值不正确的有用信息。
本文目录一览:- 使用Secure Websocket和PHP – 加密握手(websocket数据加密)
- html5 - 本质就是websocket的客户端,php Websocket 怎么接收数据
- HTML5 websockets与PHP websockets vs node.js websockets?
- IE11 对 websocket 报 SecurityError 问题
- javascript – WebSocket握手期间出错:PHP的’Sec-WebSocket-Accept’标头值不正确
使用Secure Websocket和PHP – 加密握手(websocket数据加密)
我读过(安全)Websocket正在使用与HTTP(S)协议相同的端口.
但是,我的PHP Websocket服务器从客户端接收加密的握手,我正在收听12345端口上的开放连接.
我的系统通过非安全websocket很好地工作,但我需要添加安全功能,我不明白为什么我会收到这些加密的握手.由于OSI模型,它对我来说是透明的……
如果我配置apache来激活SSL引擎并监听12345端口.我不能再为我的PHP Websocket服务器使用这个端口,因为它将处于“已经使用过”的状态……或者我忘记了一些东西……
我迷路了 :(
编辑:
这是我的安全websocket标头(使用wss://):
请求网址:wss:// localhost:12345 /
在这里我的简单websocket标头(使用ws://):
请求网址:ws:// localhost:12345 /
请求方法:GET
状态代码:101切换协议
请求Headersview源
连接方式:升级
主持人:本地主机:12345
产地:HTTP://本地主机
仲的WebSocket的扩展:X-WebKit的放气框架
Sec-WebSocket-Key:wovBDvKiKdy / 0Y2BQPr9w ==
仲的WebSocket-版本:13
升级:网页套接字
(密钥3):00:00:00:00:00:00:00:00
响应标题来源
连接方式:升级
仲的WebSocket-接受:1ao7ngQG4LAa3JxFibyvoocbSAM =
升级:网页套接字
(挑战回复):00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
为什么没有安全连接我会得到更多?
解决方法:
I read that (secure) Websocket are using the same ports that the HTTP(S) protocol
默认情况下,是 – 但您可以通过URL覆盖端口,请考虑:
http://www.example.com:443/
https://www.example.com:8080/
http://www.example.com:12345/
如果其他东西已经在某个特定的端口/地址上侦听,那么你就无法在那里运行第二个服务器 – 所以如果你的网络服务器已经在端口443(https)上监听,你将无法在其上运行一个单独的websocket服务器.同一个港口.
只需将您的HTTPS服务器留在443,然后在12345运行ssl ws服务器.
刚刚看到你的最后评论.
SSL不仅仅是关于您监听的端口 – 流量是加密的.如果你想处理wss流量,那么你需要一个支持SSL的服务器.有多种实现方法,这取决于您实现当前服务器的方式.
html5 - 本质就是websocket的客户端,php Websocket 怎么接收数据
class WebsocketClient { private $_Socket = null; public function __construct($host, $port) { $this->_connect($host, $port); } public function __destruct() { $this->_disconnect(); } public function sendData($data) { // send actual data: return fwrite($this->_Socket, $this->encode($data)) or die(''Error:'' . $errno . '':'' . $errstr); $wsData = fread($this->_Socket, 2000); $retData = trim($wsData, chr(0) . chr(255)); return $retData; } private function encode($data) { $data = is_array($data) || is_object($data) ? json_encode($data) : (string)$data; $len = strlen($data); $mask = array(); for ($j = 0; $j 127) { return false; } } $head[1] += 128; $head = array_merge($head, $mask); foreach ($head as $k => $v) { $head[$k] = chr($v); } $mask_data = ''''; for ($j = 0; $j _generateRandomString(32); $key2 = $this->_generateRandomString(32); $key3 = $this->_generateRandomString(8, false, true); $header = "GET ws://" . $host . ":" . $port . "/ HTTP/1.1\r\n"; $header .= "Host: " . $host . ":" . $port . "\r\n"; $header .= "Connection: Upgrade\r\n"; $header .= "Pragma: no-cache\r\n"; $header .= "Cache-Control: no-cache\r\n"; $header .= "Upgrade: websocket\r\n"; $header .= "Sec-WebSocket-Version: 13\r\n"; $header .= "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\r\n"; $header .= "Accept-Encoding: gzip, deflate, sdch\r\n"; $header .= "Accept-Language: zh-CN,zh;q=0.8\r\n"; $header .= "Sec-WebSocket-Key: " . $key1 . "\r\n"; $header .= "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n"; $header .= "\r\n"; $this->_Socket = fsockopen($host, $port, $errno, $errstr, 2); fwrite($this->_Socket, $header) or die(''Error: '' . $errno . '':'' . $errstr); $response = fread($this->_Socket, 2000); /** * @todo: check response here. Currently not implemented cause "2 key handshake" is already deprecated. * See: http://en.wikipedia.org/wiki/WebSocket#WebSocket_Protocol_Handshake */ return true; } private function _disconnect() { fclose($this->_Socket); } private function _generateRandomString($length = 10, $addSpaces = true, $addNumbers = true) { $characters = ''abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"§$%&/()=[]{}''; $useChars = array(); // select some random chars: for ($i = 0; $i <p>能向服务器发送数组,怎么接收数据?</p> <h2>回复内容:</h2> <pre>class WebsocketClient { private $_Socket = null; public function __construct($host, $port) { $this->_connect($host, $port); } public function __destruct() { $this->_disconnect(); } public function sendData($data) { // send actual data: return fwrite($this->_Socket, $this->encode($data)) or die(''Error:'' . $errno . '':'' . $errstr); $wsData = fread($this->_Socket, 2000); $retData = trim($wsData, chr(0) . chr(255)); return $retData; } private function encode($data) { $data = is_array($data) || is_object($data) ? json_encode($data) : (string)$data; $len = strlen($data); $mask = array(); for ($j = 0; $j 127) { return false; } } $head[1] += 128; $head = array_merge($head, $mask); foreach ($head as $k => $v) { $head[$k] = chr($v); } $mask_data = ''''; for ($j = 0; $j _generateRandomString(32); $key2 = $this->_generateRandomString(32); $key3 = $this->_generateRandomString(8, false, true); $header = "GET ws://" . $host . ":" . $port . "/ HTTP/1.1\r\n"; $header .= "Host: " . $host . ":" . $port . "\r\n"; $header .= "Connection: Upgrade\r\n"; $header .= "Pragma: no-cache\r\n"; $header .= "Cache-Control: no-cache\r\n"; $header .= "Upgrade: websocket\r\n"; $header .= "Sec-WebSocket-Version: 13\r\n"; $header .= "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\r\n"; $header .= "Accept-Encoding: gzip, deflate, sdch\r\n"; $header .= "Accept-Language: zh-CN,zh;q=0.8\r\n"; $header .= "Sec-WebSocket-Key: " . $key1 . "\r\n"; $header .= "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n"; $header .= "\r\n"; $this->_Socket = fsockopen($host, $port, $errno, $errstr, 2); fwrite($this->_Socket, $header) or die(''Error: '' . $errno . '':'' . $errstr); $response = fread($this->_Socket, 2000); /** * @todo: check response here. Currently not implemented cause "2 key handshake" is already deprecated. * See: http://en.wikipedia.org/wiki/WebSocket#WebSocket_Protocol_Handshake */ return true; } private function _disconnect() { fclose($this->_Socket); } private function _generateRandomString($length = 10, $addSpaces = true, $addNumbers = true) { $characters = ''abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"§$%&/()=[]{}''; $useChars = array(); // select some random chars: for ($i = 0; $i <p>能向服务器发送数组,怎么接收数据?</p> <pdata-id="1020000005871060"> </p><p>http://www.workerman.net/workerman-chat<br>可以看下这个,PHP写的websocket聊天室,客服功能其实可以用里面的单聊功能实现 .有人用它实现过客服,包括网页和客户端软件。<br>开发手册:http://workerman.net/gatewaydoc/<br>Demo:http://chat.workerman.net/</p> <pdata-id="1020000005852869"> </p><p>百度上关于php websocket的教程已经有足够多了,你可以去看下。</p> <pdata-id="1020000005871112"> </p><p>socket_read读取</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182"rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p> <pdata-id="1020000005876854"> </p><p>已解决非常感谢各位解答</p>
HTML5 websockets与PHP websockets vs node.js websockets?
我想知道的是三者之间有什么区别,我的意思是我不想学习所有这三者,如果有的话比其他人好.
解决方法
IE11 对 websocket 报 SecurityError 问题
IE11 对 websocket 报 SecurityError 问题
最近发现某些 IE11 版本 new websocket () 时会报 SecurityError 错误,有以下测试: 1. 访问站点与 wss 站点均为本地站点:无问题 2. 访问站点为公司测试环境,wss 站点为本地站点:SecurityError 报错的 IE11 版本各不相同,操作系统为 win7 32 位及 windows 2012 server,win7 64 位系统下 IE 未测试出报错。 解决方案为 Internet 选项 -> 安全 -> 本地 Internet-> 站点,把所有勾选取消。 猜测为 IE11 某些版本不支持本地站点与外部站点相混合的 websocket,问题细节还在深究,在此记录。
javascript – WebSocket握手期间出错:PHP的’Sec-WebSocket-Accept’标头值不正确
我用PHP编写了websocket服务器/客户端,它在2年内为我工作.现在它不起作用,说:WebSocket握手期间出错:错误的’Sec-WebSocket-Accept’标头值
我的客户端代码基本上是这样的:
socket = new WebSocket("ws://<?= EVENT_SERVER_ADDR ?>:"+EVENT_SERVER_PORT+"<?= EVENT_SERVER_WWW_PATH ?>");
PHP服务器端代码是这样的:
list ($resource, $host, $connection, $version, $origin, $key, $protocol, $upgrade) = $this->getheaders ($buffer);
$this->log ("Handshaking...");
$reply =
"HTTP/1.1 101 Switching Protocols\r\n" .
"Upgrade: {$upgrade}\r\n" .
"Connection: {$connection}\r\n" .
"Sec-WebSocket-Version: {$version}\r\n" .
"Sec-WebSocket-Origin: {$origin}\r\n" .
"Sec-WebSocket-Location: ws://{$host}{$resource}\r\n" .
"Sec-WebSocket-Accept: " . $this->calcKey ($key) . "\r\n";
if ($protocol)
$reply .= "Sec-WebSocket-Protocol: $protocol\r\n";
$reply .= "\r\n";
// Closes the handshake
socket_write ($user->socket, $reply, strlen ($reply));
function calcKey ($key) {
// Constant string as specified in the ietf-hybi-17 draft
$key .= "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
$key = sha1 ($key, true);
// $key = pack ('H*', $key); // should I uncomment this line?
$key = base64_encode ($key);
return $key;
}
function getheaders ($buffer) {
$resource = $host = $connection = $version = $origin = $key = $protocol = $upgrade = null;
preg_match ('#GET (.*?) HTTP#', $buffer, $match) && $resource = $match[1];
preg_match ("#Host: (.*?)\r\n#", $buffer, $match) && $host = $match[1];
preg_match ("#Connection: (.*?)\r\n#", $buffer, $match) && $connection = $match[1];
preg_match ("#Sec-WebSocket-Version: (.*?)\r\n#", $buffer, $match) && $version = $match[1];
preg_match ("#Origin: (.*?)\r\n#", $buffer, $match) && $origin = $match[1];
preg_match ("#Sec-WebSocket-Key:\s*(.*?)\r\n#", $buffer, $match) && $key = $match[1];
preg_match ("#Sec-WebSocket-Protocol:\s*(.*?)\r\n#", $buffer, $match) && $protocol = $match[1];
preg_match ("#Upgrade: (.*?)\r\n#", $buffer, $match) && $upgrade = $match[1];
return array ($resource, $host, $connection, $version, $origin, $key, $protocol, $upgrade);
}
有趣的是,那些家伙只是改变了标准而没有保持旧代码的功能,也没有在网上说任何话(我真的很努力地去谷歌).有谁知道我的问题是什么?
解决方法:
所以我想出了问题所在.那是缓冲限制.
显然,变量$buffer只包含大约4 KB的数据,而且由于来自dataTables的cookie,输入数据要多得多.并且Sec-WebSocket-Key标题是在所有cookie之后.所以$key每次都是空的,给出了错误的Sec-WebSocket-Accept.
建议:调试更深入.
关于使用Secure Websocket和PHP – 加密握手和websocket数据加密的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于html5 - 本质就是websocket的客户端,php Websocket 怎么接收数据、HTML5 websockets与PHP websockets vs node.js websockets?、IE11 对 websocket 报 SecurityError 问题、javascript – WebSocket握手期间出错:PHP的’Sec-WebSocket-Accept’标头值不正确等相关知识的信息别忘了在本站进行查找喔。
本文标签: