1

我们已经设置了一个安全套接字服务器,它在使用 SecureServer 保护它之前就已经工作了。运行 php 脚本成功,但尝试从应用程序连接时,浏览器会抛出 SSL_ERROR_NO_CYPHER_OVERLAP 错误。

可能我们的 php 脚本有问题。有人知道如何解决这个问题吗?

我们有的代码:

$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'
        )
    )
);

一些文章建议摆弄浏览器配置,但所有访问者都应该可以使用连接..(没有摆弄)


编辑:我们在错误的地方使用了 SecureServer,用更正的代码添加了答案。

4

2 回答 2

1

将 React\Socket\SecureServer 与 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
);
于 2018-01-03T13:49:12.600 回答
1

当服务器使用的密码套件列表与客户端或浏览器使用的密码套件列表没有共同的条目时,可能会发生此错误。我会看看您的'ciphers'产品线,并确保您正确列出了套件,并且您使用的现代套件可能在现代浏览器中可用。

密码套件上的 OpenSSL 文档包含可用套件的完整列表以及指定它们的正确格式。特别是,我发现明确列出套件比您当前的符号更容易,这很容易意外排除所有或大部分套件。您也可以只指定一个族,例如TLSv1.2在列表中。

于 2017-12-27T16:10:33.533 回答