Я создал приложение для чата, которое использует сервер websocket PHP, который работает по соединению не-HTTPS. Я установил SSL-сертификат на своем сервере apache, и он перестал работать, потому что сервер веб-сокетов не может передать клиенту рукопожатие, потому что браузер отправляет зашифрованные данные.
Теперь я хочу установить соединение wss://
из браузера и я понятия не имею, как это сделать.
Вот так выглядит моя функция рукопожатия:
function perform_handshaking($received_header, $client_conn, $host, $port)
{
$headers = array();
$lines = preg_split("/\r\n/", $received_header);
foreach ($lines as $line) {
$line = chop($line);
if (preg_match('/\A(\S+): (.*)\z/', $line, $matches)) {
$headers[$matches[1]] = $matches[2];
}
}
$secKey = $headers['Sec-WebSocket-Key'];
$secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
//hand shaking header
$upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
"Upgrade: websocket\r\n" .
"Connection: Upgrade\r\n" .
"WebSocket-Origin: $host\r\n" .
"WebSocket-Location: wss://$host:$port/projects/messenger/chat\r\n" .
"Sec-WebSocket-Accept:$secAccept\r\n\r\n";
socket_write($client_conn, $upgrade, strlen($upgrade));
}
А вот как я запускаю сервер:
$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);
$clients = array($socket);
Теперь мне нужно знать, как зашифровать и расшифровать данные с помощью SSL-сертификата
Заранее большое спасибо за помощь.