直接原因是PHP找不到可信CA证书链,因phpEnv未配置curl.cainfo且Windows下OpenSSL不读系统证书库;需下载https://curl.se/ca/cacert.pem,配置绝对路径至php.ini并重启服务。

phpEnv里cURL报错cURL error 60: SSL certificate problem
直接原因是PHP找不到可信的CA证书链,导致无法验证HTTPS服务器身份。phpEnv默认不配置curl.cainfo,且Windows下OpenSSL不自动读取系统证书库,所以哪怕浏览器能打开目标网址,curl_exec()仍会失败。
确认当前PHP是否加载了正确的CA路径
在phpEnv控制面板或命令行执行php --ini,找到正在生效的php.ini;然后搜索curl.cainfo这一行:
- 如果该行被注释(开头是分号
;)或值为空,说明未启用CA证书路径 - 如果值存在但指向一个不存在的文件(比如
D:\phpEnv\cacert.pem但实际没放),也会触发cURL error 60 - 用
var_dump(ini_get('curl.cainfo'));在PHP脚本中验证运行时读取到的路径是否真实可读
下载并配置cacert.pem证书文件
必须使用官方维护的根证书包,不能用浏览器导出的单个证书或随意复制的.pem文件:
- 从
https://curl.se/ca/cacert.pem下载最新cacert.pem(注意不是旧域名curl.haxx.se) - 保存到一个稳定路径,例如
D:\phpEnv\extras\cacert.pem(避免中文、空格、权限受限目录如Program Files) - 编辑
php.ini,取消注释并修改为:curl.cainfo = "D:/phpEnv/extras/cacert.pem"(Windows下可用正斜杠,路径必须是绝对路径) - 重启phpEnv的Apache/Nginx和PHP-FPM服务(仅改php.ini不重启无效)
不推荐但应急可用的绕过方式
禁用SSL校验只应在开发环境临时调试用,生产环境绝不可行:
立即学习“PHP免费学习笔记(深入)”;
- 在PHP代码中调用cURL前加:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);和curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); - 若用Guzzle(如阿里云/腾讯云SDK),可在创建
Client时传['verify' => false],但会引发Uncaught InvalidArgumentException: verify must be a boolean, string, or array错误,因为新版Guzzle强制要求verify为true/false或证书路径字符串 - 全局禁用(如改
guzzlehttp/guzzle/src/Client.php)违反最小权限原则,且下次更新包即失效
真正容易被忽略的是:phpEnv多个PHP版本共用同一套php.ini模板,但不同版本可能对应不同位数(x86/x64)、不同OpenSSL版本,务必确认你改的是当前项目实际使用的那个PHP版本的配置文件。



















