Ok, hola a todos, tengo un pequeño problema que me lleva ya rato jodiendo la cabeza.
He estado intentando crear un servidor webscoket con php (del lado del servidor) y con javascript (del lado del cliente), todo bien. Pero.. ya se presenta el problema cuando pongo toda la página en https, resultaba que el handshake no lograba hacer el proceso, vi que pasaba si el header tenia algo malo y ví que estaba codificado (con http, no lo estaba, lógico xD, es texto plano), ahora mi pregunta es.. ¿como hago para poder leer eso codificado, o evitar que venga codificado?
donde lo viste codificado?
el navegador debe hacerse cargo por completo del cifrado
a ver, te explico, yo corro un codigo servidor socket aparte con el comando "php" en la consola, este servidor se encarga de recibir conexiones FancyWebSockets de javascript, y claro.. la conexión cuando la lees te suelta las características (en el caso de HTTP (ws) me suelta esto):
GET /server HTTP/1.1
Host: proyectoz.tk:9000
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://proyectoz.ml
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es-US,es-419;q=0.8,es;q=0.6
Sec-WebSocket-Key: KEY
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Pero con el SSL (HTTPS, WSS) de por medio me suelta esto:
����y?1��T1�����o֡�[w�������̨̩�+�/�,�0����/5
h
uP
�proyectoz.tk#
repito, como lees la conexión?
directamente al correr el servidor te muestra en consla esa información sobre la conexión entrante?
no sea, del socket..
if (in_array($server, $readSocks)) {
$newClient = stream_socket_accept($server, 0);
if ($newClient) {
$headers = fread($newClient, self::HEADER_BYTES_READ); // <-------- Aquí es donde leo la conexion
echo "HEADERS: ".$headers; // <---------------------------------
// -------------> Todo esto lo necesito para posteriormente validar la conexión con el handshake
$this->setPathParams($headers);
$this->clients[] = $newClient;
$this->stepRecursion = true;
$this->handler->onOpen($this->connImpl->getConnection($newClient));
$this->handshake($newClient, $headers);
}
unset($readSocks[array_search($server, $readSocks)]);
}
(https://proyectoz.tk/img/ssh.png)
revisate esto... parece ser un bug de fancywebsockets
https://stackoverflow.com/questions/30872839/wss-fails-over-https-on-apache-server (https://stackoverflow.com/questions/30872839/wss-fails-over-https-on-apache-server)
voy a tratar de probar eso, editaré este post para informar luego de hacer la prueba.
responde en comentario