Как настроить WebSocket защищенное соединение с PHP?

Обновить

November 2018

Просмотры

9.9k раз

8

Я не могу найти какую - либо информацию о настройке соединения WSS в PHP. У меня никаких проблем не было связано броска 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 ответы

1

Ваш лучший выстрел на PHP в настоящее время использовать Ratchet . Лучший способ установить соединение WSS, чтобы поставить WebSocket сервер за Nginx или HAProxy , который будет обрабатывать все SSL материал для вас. Это объясняется здесь с HAProxy. Обратите внимание , что вы можете сделать то же самое с Nginx , так как он теперь также поддерживает WebSocket.

4

Пробовали ли вы 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);
}
?>
2

Ниже приведен пример (и ссылки), который был слегка изменен, и нашел от другого 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 пост, вы найдете ответ от «Сэма». Я необходимости делать это же самое в течение следующих нескольких недель, поэтому я планирую использовать метод Sams ... как я больше любитель CURL в PHP.