【问题标题】:React SecureServer runs but throws SSL_ERROR_NO_CYPHER_OVERLAP in browserReact SecureServer 运行但在浏览器中抛出 SSL_ERROR_NO_CYPHER_OVERLAP
【发布时间】:2017-12-27 15:19:29
【问题描述】:

我们已经设置了一个安全套接字服务器,它在使用 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,用更正的代码添加了答案。

【问题讨论】:

    标签: php openssl ratchet reactphp


    【解决方案1】:

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

    关于密码套件的 OpenSSL 文档具有可用套件的 full list 和用于指定它们的 proper format。特别是,我发现明确列出套件比您当前的符号更容易,这很容易意外排除所有或大部分套件。您也可以只指定一个系列,例如列表中的TLSv1.2。

    【讨论】:

    • 感谢您的宝贵时间。但是,将行更改为'ciphers' => 'TLSv1.2' 并不能帮助解决错误。
    • 您是否尝试过明确列出套件,例如在上面链接的 Mozilla wiki 中?此外,了解操作系统和 OpenSSL 版本可能有助于确定这一点。
    • SSL 版本:OpenSSL/1.0.1e,Linux 服务器上的 PHP 5.5.38。
    • 我尝试使用字符串ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256,但它仍然会抛出该错误。
    • 为您在这方面所花费的时间点赞。我们让它工作了。
    【解决方案2】:

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

    【讨论】:

    • 从 cboden/ratchet 0.4.3 版本开始,在 SecureServer 的实例中不再存在方法 listen()。
    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 2023-04-06
    • 1970-01-01
    • 2021-02-18
    • 2023-04-01
    • 2019-01-08
    • 2012-03-09
    • 2019-07-01
    相关资源
    最近更新 更多