2012-05-16 25 views
8

No encuentro información sobre cómo configurar una conexión wss en PHP. No tengo ningún problema para conectar throw ws. Estoy usando esta gran biblioteca para hacer esto por cierto: https://github.com/albeva/php-websocketCómo configurar WebSocket Conexión segura con PHP?

Pero mi sitio web usa https y necesito una conexión WebSocket Secure para evitar que Firefox se queje de que la conexión no es segura.

Gracias de antemano por su ayuda.


Editar

Este es el código utilizado por la biblioteca para iniciar la conexión de socket:

$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(); 
} 

Creo que necesito cambiar el código, pero no puedo encontrar cómo .

Respuesta

1

su mejor tiro en PHP es actualmente utilizar Ratchet. La mejor forma de configurar una conexión de wss es poner su servidor de websocket detrás de Nginx o HAProxy, que manejará todas las cosas de SSL por usted. Esto se explica here con HAProxy. Tenga en cuenta que puede hacer lo mismo con Nginx ya que ahora también es compatible con WebSocket.

2

Aquí hay un ejemplo (y un enlace), que se modificó ligeramente y se encontró desde otra publicación SO. Link to other post

Y aquí hay un enlace a la definición de la función stream_context_create php. function definition

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); 
} 

Sin embargo, en la parte inferior del poste ligado SO, se encuentra una respuesta de "Sam". Necesito hacer lo mismo en las próximas semanas, así que planeo usar el método de Sams ... ya que soy más entusiasta de CURL dentro de PHP.

+0

He actualizado mi publicación para mostrar la función de inicio (que usa la extensión de socket php) de la biblioteca que estoy usando. Ya leí la publicación que está señalando pero no pude hacer que funcione con este código. –

4

¿Has probado 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); 
} 
?> 
Cuestiones relacionadas