Search code examples
phpopensslratchetreactphp

React SecureServer runs but throws SSL_ERROR_NO_CYPHER_OVERLAP in browser


We've set up a secure socket server, which was working before securing it with SecureServer. Running the php script succeeds but when trying to connect from application, the browser throws a SSL_ERROR_NO_CYPHER_OVERLAP error.

Probably something is wrong in our php script. does someone know how to tackle this?

Code we have:

$webServer = new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer(
            new Ratchet\Wamp\WampServer(
                $pusher
            )
        )
    ),
    new React\Socket\SecureServer(
        $webSock,
        $loop,
        array(
            'local_cert' => 'xxx',
            'allow_self_signed' => true,
            'verify_peer' => false,
            // Not sure what to put in ciphers ??
            'ciphers' => 'EECDH+AES:EDH+AES:-SHA1:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5:!RC4:!MEDIUM'
        )
    )
);

Some articles suggest of fiddling with browser configs, but the connection should be available to all visitors.. (without the fiddling)


EDIT: We used SecureServer at the wrong place, added answer with corrected code.


Solution

  • Using React\Socket\SecureServer with Ratchet:

    // Set up secure React server
    $webSock = new React\Socket\SecureServer(
        new React\Socket\Server($loop),
        $loop,
        array(
            'local_cert' => 'xxxx/combined.pem',
            //'allow_self_signed' => true,
            'verify_peer' => false
        )
    );
    $webSock->listen(8080, '0.0.0.0'); // Binding to 0.0.0.0 means remotes can connect (127.0.0.1 || 0.0.0.0)
    
    // Ratchet magic
    $webServer = new Ratchet\Server\IoServer(
        new Ratchet\Http\HttpServer(
            new Ratchet\WebSocket\WsServer(
                new Ratchet\Wamp\WampServer(
                    $pusher
                )
            )
        ),
        $webSock
    );