如何配置Laravel Websockets启用SSL?解决证书颁发者未识别错误
Laravel Websockets SSL配置:解决“对等方证书颁发者未被识别”错误
我已为Laravel Websockets配置SSL,但出现**“Peer's certificate issuer not recognized”(对等方证书颁发者未被识别)**错误,以下是我的配置文件,恳请帮忙排查:
broadcasting.php 配置
'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER', 'mt1'), 'encrypted' => true, 'host' => env('PUSHER_HOST', '127.0.0.1'), 'port' => env('PUSHER_PORT', 6001), 'scheme' => env('PUSHER_SCHEME', 'https'), 'useTLS' => true, 'curl_options' => [ CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, ] ], 'client_options' => [ // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html ], ],
websockets.php 配置
'ssl' => [ /* * 文件系统中本地证书文件的路径。必须是PEM编码文件, * 包含证书和私钥。可选择性包含颁发者证书链。私钥也可 * 存储在local_pk指定的单独文件中。 */ 'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null), /* * 当证书(local_cert)和私钥分离时,文件系统中本地私钥文件的路径。 */ 'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null), /* * local_cert文件的密码。 */ 'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null), 'verify_peer' => false, 'verify_peer_name' => false, ],
排查步骤:
检查证书链完整性
确认local_cert指向的PEM文件包含完整证书链:服务器证书 + 中间证书 + 根证书。仅提供服务器证书会导致系统无法识别颁发者,需将所有证书按顺序合并到同一个PEM文件中。验证证书有效性与域名匹配
使用openssl x509 -in /path/to/your/cert.pem -text -noout命令查看证书详情:- 检查
Issuer字段是否为受信任的CA机构(自签名证书需手动信任); - 确认证书未过期;
- 确保证书的
Common Name(CN)或Subject Alternative Name(SAN)与访问Websocket服务的域名完全一致。
- 检查
调整客户端Guzzle配置
在broadcasting.php的client_options中添加SSL验证选项(测试环境可临时关闭,生产环境禁用):'client_options' => [ 'verify' => false, ],生产环境需配置
verify为CA证书路径,确保客户端信任服务端证书。重启Websocket服务
修改配置后必须重启Laravel Websockets服务,确保新配置生效。检查文件权限
确认Websocket进程拥有读取local_cert和local_pk文件的权限,避免因权限不足导致证书加载失败。
内容的提问来源于stack exchange,提问作者Abbas Ajorlou
相关产品推荐
相关产品推荐

