求救!关于wss的问题

appleman233

之前用HTTP时一切顺利。这两天加上了SSL后出现以下问题:

WebSocket connection to 'wss://****.com:7272/' failed: Error in connection establishment: net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH

证书是用certbot的let's encrypt获取的。服务器是Ubuntu。Web Server是apache

start_gateway.php已经按手册给出的改好

$context = array(
    'ssl' => array(
        'local_cert'                 => '/etc/letsencrypt/live/****.com/fullchain.pem', // 也可以是crt文件
        'local_pk'                   => '/etc/letsencrypt/live/****.com/privkey.pem',
        'verify_peer'               => false,
    )
);

$gateway = new Gateway("Websocket://0.0.0.0:7272", $context);
$gateway->transport = 'ssl';

可以正常浏览 https://_**_.com 。 从服务器上可以检测到7272端口正在被listening。从客户端可以telnet ****.com 7272

之前出现过CONNECTION TIME OUT的错误, 重启start.php后好了。现在就是ERR_SSL_VERSION_OR_CIPHER_MISMATCH这个错误

不知大家遇到过有没有类似的情况。 求解答,跪谢了

4092 1 0
1个回答

maq

看报错信息应该是客户端跟服务器端支持的 SSL 版本不匹配。

根据你的描述,你的服务器端应该是 GatewayWorker,不知道你的客户端用的是什么。

Workerman 本身并没有处理 SSL 层的操作,而是由 PHP 底层来自动处理的,你可以试试在 ssl 选项中增加下面的内容:

'ciphers' => 'DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:KRB5-DES-CBC3-MD5:KRB5-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DES-CBC3-MD5:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC2-CBC-MD5:KRB5-RC4-MD5:KRB5-RC4-SHA:RC4-SHA:RC4-MD5:RC4-MD5:KRB5-DES-CBC-MD5:KRB5-DES-CBC-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:DES-CBC-MD5:EXP-KRB5-RC2-CBC-MD5:EXP-KRB5-DES-CBC-MD5:EXP-KRB5-RC2-CBC-SHA:EXP-KRB5-DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC2-CBC-MD5:EXP-KRB5-RC4-MD5:EXP-KRB5-RC4-SHA:EXP-RC4-MD5:EXP-RC4-MD5'

如果还不行的话,可以考虑用 Web server(apache 或者 Nginx)做反向代理,在 Web server 里面解决 ssl 握手问题,一般来说那里的配置能力更强一些。

  • appleman233 2018-05-04

    谢谢回复。按照你说的办法把’ciphers'加到了ssl里面问题还是没有解决。困扰了很久最后还是用apache做反向代理了。谢谢提供思路 :)

  • maq 2018-05-04

    想起一点,PHP 里的 SSL 层实际是交给 openssl 来处理的,所以可能跟 openssl 扩展的配置有关。

年代过于久远,无法发表回答
🔝