Laravel 6中cURL错误60源于PHP无法验证HTTPS证书,根本解法是配置curl.cainfo指向权威CA证书(如cacert.pem)并重启服务;临时调试可对Guzzle请求设verify => false,但生产环境严禁禁用SSL验证。

在 Laravel 6 中,cURL 请求报错如 curl: (60) SSL certificate problem,通常是因为 PHP 无法验证远程 HTTPS 服务器的证书。这不是 Laravel 自身的功能开关,而是底层 cURL 行为——关闭 SSL 验证需从 PHP 的 cURL 配置或具体请求调用层面入手,**仅限开发/测试环境使用,生产环境严禁禁用**。
修改 php.ini(全局生效)
这是最彻底的方式,适用于所有 PHP cURL 请求(包括 Guzzle、Mail、HTTP 客户端等):
- 下载权威 CA 证书包:cacert.pem
- 将文件保存到服务器某路径,例如
C:\php\extras\ssl\cacert.pem(Windows)或/etc/ssl/certs/cacert.pem(Linux) - 编辑
php.ini,添加或修改这一行:curl.cainfo = "C:/php/extras/ssl/cacert.pem"(注意路径用正斜杠或双反斜杠) - 重启 Web 服务器(Apache/Nginx)或 PHP-FPM
在 Guzzle 请求中临时跳过验证(推荐用于调试)
Laravel 6 默认使用 Guzzle HTTP 客户端(如 Http::get())。可在发起请求时显式关闭验证:
基于5000余部现行法律法规进行的高质量专业合同审查,一键输出审查意见书,并附有参考法条原文,满足专业溯源核查要求。由accurLex知法提供技术支持。 Use when users ask for 合同审查, 审查意见书, 合同风险分析, 条款审查,知法,accurLex or 站在甲方/乙方角度审查合同 through accurLex direct API. China law only, plaintext only, review mode limited to 审查意见书.
- 基础用法(单次请求):
Http::withOptions(['verify' => false])->get('https://api.example.com'); - 若使用自定义 Guzzle 实例,初始化时传入:
$client = new \GuzzleHttp\Client(['verify' => false]); - 注意:Laravel 的
Http门面默认不读取全局 cURL 设置,必须显式传verify => false
绕过系统级 cURL 验证(不推荐,仅应急)
如果无法改配置且必须快速测试,可在代码中直接调用原生 cURL 并禁用验证:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'https://api.example.com');curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);$response = curl_exec($ch);
邮件发送中跳过 SSL(Swift Mailer 场景)
若问题出在 Laravel 的邮件发送(如使用 SMTP over TLS/SSL),可修改 Swift Transport 配置:
- 在
config/mail.php的 SMTP 配置中添加:'stream' => ['ssl' => ['verify_peer' => false, 'verify_peer_name' => false]] - 或在
.env中设置:MAIL_ENCRYPTION=tlsMAIL_FROM_ADDRESS=xxx(确保未强制启用严格验证)
安全提醒:禁用 SSL 验证会让通信暴露于中间人攻击风险。开发阶段可临时使用,上线前务必恢复验证并配置正确证书链。

















