之前用HTTP時一切順利。這兩天加上了SSL后出現(xiàn)以下問題:
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已經(jīng)按手冊給出的改好
$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
之前出現(xiàn)過CONNECTION TIME OUT的錯誤, 重啟start.php后好了?,F(xiàn)在就是ERR_SSL_VERSION_OR_CIPHER_MISMATCH
這個錯誤
不知大家遇到過有沒有類似的情況。 求解答,跪謝了
看報錯信息應該是客戶端跟服務器端支持的 SSL 版本不匹配。
根據(jù)你的描述,你的服務器端應該是 GatewayWorker,不知道你的客戶端用的是什么。
Workerman 本身并沒有處理 SSL 層的操作,而是由 PHP 底層來自動處理的,你可以試試在 ssl 選項中增加下面的內(nèi)容:
'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 握手問題,一般來說那里的配置能力更強一些。