Как настроить безопасное соединение WebSocket с PHP?
Я не могу найти никакой информации о настройке соединения wss в PHP. У меня нет проблем с подключением throw ws. Я использую эту довольно большую библиотеку, чтобы сделать это, кстати:https://github.com/albeva/php-websocket
но мой сайт использует https, и мне нужно безопасное соединение WebSocket, чтобы избежать Firefox жаловаться на то, что соединение небезопасно.
заранее спасибо за помощь.
редактировать
вот код, используемый библиотекой для запуска подключения сокета:
$master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!is_resource($master)) {
$this->throwSocketError();
}
// set options
if (!socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1)) {
$this->throwSocketError();
}
// bind
if (!socket_bind($master, $this->host, $this->port)) {
$this->throwSocketError();
}
// listen for connections
if (!socket_listen($master, SOMAXCONN)) {
$this->throwSocketError();
}
Я считаю, что мне нужно изменить этот код, но я не могу найти как.
3 ответов
ты stream_socket_server ?
<?php
$socket = stream_socket_server("ssl://0.0.0.0:".$port, $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, 'some data...\n');
fclose($conn);
}
fclose($socket);
}
?>
вот пример (и ссылка), который был немного изменен и найден из другого сообщения SO. ссылка на другой пост
и вот ссылка на определение функции stream_context_create php. определение функции
try
{
$localCertificateFilespec = $connection['localCertificateFilespec'];
$localCertificatePassphrase = $connection['localCertificatePassphrase'];
$sslOptions = array(
'ssl' => array(
'local_cert' => $localCertificateFilespec,
'passphrase' => $localCertificatePassphrase,
'allow_self_signed' => true,
'verify_peer' => false
)
);
$sslContext = stream_context_create($sslOptions);
$clientArguments = array(
'stream_context' => $sslContext,
'local_cert' => $localCertificateFilespec,
'passphrase' => $localCertificatePassphrase,
'trace' => true,
'exceptions' => true,
'encoding' => 'UTF-8',
'soap_version' => SOAP_1_1
);
$oClient = new WSSoapClient($connection['wsdlFilespec'], $clientArguments);
$oClient->__setUsernameToken($connection['username'], $connection['password']);
return $oClient->__soapCall($operation, $request);
}
, в самом низу связанного сообщения SO вы найдете ответ от "Sam". Мне нужно сделать то же самое в ближайшие несколько недель, поэтому я планирую использовать метод Sams... как я больше поклонника CURL в PHP.
ваш лучший выстрел на PHP в настоящее время использовать Храповой. Лучший способ настроить соединение wss-это поместить ваш сервер websocket за Nginx или HAProxy, который будет обрабатывать все SSL-материалы для вас. Это объясняется здесь С HAProxy. Обратите внимание, что вы можете сделать то же самое с Nginx, так как теперь он также поддерживает WebSocket.