You need to enable JavaScript to run this app. Laravel7用Guzzle调HTTPS接口报cURL60自签证书错 配cacert仍无效
优惠活动
大模型
产品
解决方案
定价
更多

Laravel7用Guzzle调HTTPS接口报cURL60自签证书错 配cacert仍无效

问题复现场景
  • 运行栈:XAMPP 7.4.5 环境下的 Laravel 7 项目,调用同机SLIM框架开发的本地接口
  • 正常表现:HTTP协议的GET接口localhost/events_platforma/view/users可正常访问
  • 异常表现:HTTPS协议的POST接口https://localhost/events_platforma/register请求返回cURL error 60: SSL certificate problem: self signed certificate
  • 已尝试操作:在php.ini中配置cacert.pem证书路径,配置内容存在语法错误:
curl.cainfo = curl.cainfo="C:\xampp\php\extras\ssl\cacert.pem"

配置加载后错误依旧存在。

错误核心原因
  1. 语法问题导致配置不生效:php.ini配置行重复写了curl.cainfo键名,cURL无法正确解析证书路径,实际未加载到指定的cacert.pem文件
  2. 证书信任逻辑不匹配:你配置的cacert.pem是公共可信CA的根证书列表,仅能校验公网受信任网站的SSL证书,无法识别XAMPP为本地环境生成的、仅对localhost生效的自签名证书
可落地的解决方法

本地开发临时方案

仅测试环境使用,禁止上线
直接在Guzzle初始化时关闭SSL证书校验,跳过自签证书的校验环节:

  • 全局配置方式:在config/services.php中补充Guzzle默认配置
'guzzle' => [
    'verify' => false,
    'timeout' => 10,
]
  • 单次请求配置方式:每次初始化Guzzle客户端时单独传参
$guzzle = new \GuzzleHttp\Client([
    'verify' => false
]);
// 发起请求示例
$res = $guzzle->post('https://localhost/events_platforma/register', [
    'form_params' => ['字段1' => '值1']
]);

规范配置方案(贴近线上生产校验逻辑)

如果不想全局关闭证书校验,可以手动让cURL信任本地的自签证书,流程如下:

  1. 修正php.ini的错误配置:打开C:\xampp\php\php.ini,把原来重复键的行替换成正确的配置,同时补充openssl的证书路径配置:
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem"

修改完成后重启XAMPP的Apache服务,通过phpinfo()确认配置已生效(检查curl.cainfo和openssl.cafile的输出路径和配置一致)
2. 定位XAMPP本地的自签服务端证书,一般文件路径为C:\xampp\apache\conf\ssl.crt\server.crt
3. Guzzle初始化时指定该自签证书作为校验信任根:

$guzzle = new \GuzzleHttp\Client([
    'verify' => 'C:\xampp\apache\conf\ssl.crt\server.crt'
]);

注意:生产环境必须开启证书校验,避免中间人攻击风险。


内容的提问来源于stack exchange,提问作者NgatungaEmily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.07 19:27:03