Laravel beyondcode/laravel-websockets开启verify_peer后wss连接失败咨询
解决方案
问题根因
开启verify_peer => true后SSL握手失败,核心是PHP的WebSocket服务SSL上下文未正确配置根CA证书用于证书合法性校验,或使用的站点证书缺少完整信任链。
分步修复步骤
- 第一步:补全
config/websockets.php的SSL配置
开启verify_peer时需额外指定系统根CA证书路径,修改后的ssl配置段如下:
'ssl' => [ 'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null), 'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null), 'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null), 'verify_peer' => true, 'allow_self_signed' => false, // 按服务器操作系统填对应根CA证书路径 // CentOS/RHEL/cPanel默认环境用这个 'cafile' => '/etc/pki/tls/certs/ca-bundle.crt', // Debian/Ubuntu环境用下面这个 // 'cafile' => '/etc/ssl/certs/ca-certificates.crt', ],
- 第二步:替换为完整证书链文件
不要使用cPanel生成的单独域名证书文件,将LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT对应环境变量的值改为AutoSSL生成的fullchain.pem路径,该文件已经包含域名证书、中间证书和根证书的完整信任链,避免浏览器校验时证书链断裂。 - 第三步:校验文件读取权限
确保运行Laravel WebSockets服务的系统用户,对local_cert、local_pk、cafile三个文件均有可读权限,可通过chmod 644 对应文件路径调整权限,私钥文件权限最高不要超过644,避免安全风险。 - 第四步:重启服务生效
修改完配置后停止原有WebSockets服务,重新启动确保配置加载:
php artisan websockets:stop php artisan websockets:serve # 生产环境用守护进程的话重启对应守护进程即可
校验方法
可以通过openssl命令验证6001端口的SSL配置是否正常:
openssl s_client -connect aceraven777.com:6001
如果返回结果中包含Verify return code: 0 (ok),说明SSL校验配置已生效,此时浏览器即可正常连接wss服务。
内容的提问来源于stack exchange,提问作者aceraven777
相关产品推荐
相关产品推荐

