Как настроить SSL на сервере PHP Websocket (без использования stream_socket_server) - PullRequest
0 голосов
/ 23 марта 2020

Я создал приложение для чата, которое использует сервер 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-сертификата

Заранее большое спасибо за помощь.

...