Symfony 5.3+Mercure+Vue调用本地Mercure端点报SSL连接错误
问题根因
- SSL连接错误是Symfony HTTP客户端不信任本地Mercure服务的自签名SSL证书,此前配置全局
verify_peer: false未生效,是因为Mercure发布器使用独立配置的HTTP客户端,未继承全局HTTP客户端配置。 - 切换HTTP协议后返回401与CORS无关,CORS仅作用于浏览器端跨域请求,服务端调用返回401是Mercure发布端鉴权失败导致。
解决方案
方案1:安全方案(推荐,无需关闭证书校验)
- 导出Symfony本地Web服务器的自签名根证书,通过
symfony server:ca:install命令生成的证书默认存放于~/.symfony/certs/rootCA.pem路径。 - 单独为Mercure配置证书信任,无需修改全局HTTP客户端配置:
# config/packages/dev/mercure.yaml mercure: hubs: default: url: '%env(MERCURE_URL)%' public_url: '%env(MERCURE_PUBLIC_URL)%' jwt: secret: '%env(MERCURE_JWT_SECRET)%' publish: ['*'] subscribe: ['*'] http_client_options: cafile: '~/.symfony/certs/rootCA.pem' # 替换为你本地实际的证书路径
方案2:开发环境临时方案(仅本地使用)
直接在Mercure配置中单独关闭证书校验,不影响其他HTTP请求的安全性:
# config/packages/dev/mercure.yaml mercure: hubs: default: http_client_options: verify_peer: false verify_host: false
HTTP协议401报错修复
如果要使用HTTP协议访问Mercure,需确认两项配置:
.env文件中的MERCURE_JWT_SECRET值与Mercure服务启动时配置的JWT密钥完全一致,不要包含多余的引号、空格。- Mercure启动参数中
allow_insecure配置为true,HTTP协议下需开启该配置才能正常处理发布请求。
内容的提问来源于stack exchange,提问作者Cristian Rodriguez Navarro
相关产品推荐
相关产品推荐

