Laravel 6 启动时 cURL error 60 是因 PHP 缺少可信 CA 证书,需配置 php.ini 的 curl.cainfo 和 openssl.cafile 指向 cacert.pem,或在 Guzzle/Http 中指定 verify 路径,开发环境可临时设 verify=false。

Laravel 6 启动时遇到 cURL 报错 cURL error 60: SSL certificate problem: unable to get local issuer certificate,本质是 PHP 的 cURL 扩展缺少可信的 CA 证书包,无法验证 HTTPS 目标服务器的证书链。这不是 Laravel 自身的问题,而是底层 PHP 环境的 SSL 配置缺失。解决方向明确:补全证书或临时绕过(仅限开发环境)。
配置 php.ini 指向可信 CA 证书(推荐)
这是最规范、安全且一劳永逸的方式,适用于所有基于 cURL 的请求(Guzzle、HTTP facade、Artisan 命令、队列等):
- 访问 https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251 下载最新
cacert.pem文件 - 将文件保存到一个稳定路径,例如:
Windows:D:\php\extras\ssl\cacert.pem
Linux/macOS:/etc/ssl/certs/cacert.pem - 打开你的
php.ini文件,取消注释并设置两行(路径需替换成你的真实路径):curl.cainfo="/path/to/cacert.pem"openssl.cafile="/path/to/cacert.pem" - 重启 Web 服务(Apache/Nginx)和 PHP-FPM(如使用),或重启集成环境(如 PhpStudy、XAMPP)
在 Guzzle 客户端中单独指定证书(项目级控制)
如果你无法修改全局 php.ini(如共享主机),或只想对特定请求生效,可在 Laravel 6 中调整 Guzzle 实例的配置:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 在发起请求前,显式传入证书路径:
$client = new \GuzzleHttp\Client(['verify' => '/path/to/cacert.pem']); - 若项目已使用
Httpfacade,可发布配置后修改:
运行php artisan vendor:publish --provider="Illuminate\Http\HttpServiceProvider",然后在config/http.php中设置'verify' => base_path('vendor/composer/ca-bundle/res/cacert.pem')(需先确保该路径存在证书) - 也可直接在请求中覆盖:
\Http::withOptions(['verify' => '/path/to/cacert.pem'])->get('https://api.example.com');
临时禁用 SSL 验证(仅限本地开发)
不建议用于生产环境,但能快速验证是否为证书问题本身:
- 在 Guzzle 初始化时关闭验证:
$client = new \GuzzleHttp\Client(['verify' => false]); - 使用 Laravel 的
Httpfacade:\Http::withOptions(['verify' => false])->get('https://api.example.com'); - 注意:此方式会跳过整个 HTTPS 证书校验,存在中间人攻击风险,上线前必须移除
确认是否生效,可在命令行运行:php -r "print_r(openssl_get_cert_locations());"
查看输出中的 default_cert_file 和 cafile 是否指向你配置的路径。










