之前用HTTP時(shí)一切順利。這兩天加上了SSL后出現(xiàn)以下問(wèn)題:
WebSocket connection to 'wss://****.com:7272/' failed: Error in connection establishment: net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH
證書(shū)是用certbot的let's encrypt獲取的。服務(wù)器是Ubuntu。Web Server是apache
start_gateway.php已經(jīng)按手冊(cè)給出的改好
$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
。 從服務(wù)器上可以檢測(cè)到7272端口正在被listening。從客戶(hù)端可以telnet ****.com 7272
之前出現(xiàn)過(guò)CONNECTION TIME OUT的錯(cuò)誤, 重啟start.php后好了。現(xiàn)在就是ERR_SSL_VERSION_OR_CIPHER_MISMATCH
這個(gè)錯(cuò)誤
不知大家遇到過(guò)有沒(méi)有類(lèi)似的情況。 求解答,跪謝了
看報(bào)錯(cuò)信息應(yīng)該是客戶(hù)端跟服務(wù)器端支持的 SSL 版本不匹配。
根據(jù)你的描述,你的服務(wù)器端應(yīng)該是 GatewayWorker,不知道你的客戶(hù)端用的是什么。
Workerman 本身并沒(méi)有處理 SSL 層的操作,而是由 PHP 底層來(lái)自動(dòng)處理的,你可以試試在 ssl 選項(xiàng)中增加下面的內(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 握手問(wèn)題,一般來(lái)說(shuō)那里的配置能力更強(qiáng)一些。
謝謝回復(fù)。按照你說(shuō)的辦法把’ciphers'加到了ssl里面問(wèn)題還是沒(méi)有解決。困擾了很久最后還是用apache做反向代理了。謝謝提供思路 :)
想起一點(diǎn),PHP 里的 SSL 層實(shí)際是交給 openssl 來(lái)處理的,所以可能跟 openssl 擴(kuò)展的配置有關(guān)。