之前用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
这个错误
不知大家遇到过有没有类似的情况。 求解答,跪谢了
看报错信息应该是客户端跟服务器端支持的 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 握手问题,一般来说那里的配置能力更强一些。
谢谢回复。按照你说的办法把’ciphers'加到了ssl里面问题还是没有解决。困扰了很久最后还是用apache做反向代理了。谢谢提供思路 :)
想起一点,PHP 里的 SSL 层实际是交给 openssl 来处理的,所以可能跟 openssl 扩展的配置有关。