В настоящее время я работаю над службой уведомления в реальном времени, используя websocket, используя TLS/SSL (wss: //).
У меня есть проблема для установления связи между браузером и сервером. Все работает отлично с сервером и клиентом в php, но когда я использую веб-узел JS для подключения к серверу, он терпит неудачу, потому что Я не знаю, как обращаться с рукопожатием на стороне сервера (из браузера).
Пока мой код для сервера:SSL websocket в php/javascript
$host = '127.0.0.1';
$port = '9000';
$null = NULL;
$context = stream_context_create();
// local_cert must be in PEM format
stream_context_set_option($context, 'ssl', 'local_cert', "cert.pem");
stream_context_set_option($context, 'ssl', 'local_pk', "key.pem");
// Pass Phrase (password) of private key
stream_context_set_option($context, 'ssl', 'passphrase', "test");
stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
stream_context_set_option($context, 'ssl', 'verify_peer', false);
// Create the server socket
$server = stream_socket_server('ssl://' . $host . ':' . $port, $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context);
if ($server == false) {
die ("Could no create the server.");
}
//start endless loop
while (true) {
$buffer = '';
print "waiting...";
$client = stream_socket_accept($server);
var_dump($client);
print "accepted " . stream_socket_get_name($client, true) . "\n";
if ($client) {
stream_set_blocking($client, true);
// TODO : handshaking
stream_set_blocking($client, false);
// Respond to php client (test only)
/*fwrite($client, "200 OK HTTP/1.1\r\n"
. "Connection: close\r\n"
. "Content-Type: text/html\r\n"
. "\r\n"
. "Hello World!");
fclose($client);*/
} else {
print "error.\n";
}
}
Ничего не говорится о SSL рукопожатия на RFC WebSocket.
Если у кого-то есть идея о том, как реализовать рукопожатие, было бы весьма полезно.
Я вижу, спасибо за разъяснение. Однако из Википедии, сервер возвращает 'HTTP/1.1 101 Импульсные Протоколы Обновление: WebSocket соединения: Обновление втор-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk = втор-WebSocket-Protocol: chat' это для' WS: // 'сокет , не должен ли я возвращать что-то другое для 'wss: //' websocket? –
@AlexandreChambet: нет, отправка запроса для обновления такая же, и ответ такой же. Единственное различие заключается в том, что один обменивается данными по простому TCP-соединению, а другой - по потоку SSL. Точно так же, как с HTTP против HTTPS. –
Спасибо, я подумаю об этом. –