Composer报错cURL error 60或SSL certificate problem的根本原因是PHP未正确配置openssl.cafile指向可信CA证书包,需下载cacert.pem并配置php.ini中openssl.cafile路径,重启环境后验证。

Composer install/update 报错 cURL error 60 或 SSL certificate problem
这是最典型的症状,错误信息里通常包含 cURL error 60、SSL certificate problem: unable to get local issuer certificate 或 Peer's Certificate issuer is not recognized。根本原因是 Composer(底层用 cURL)无法验证 Packagist(https://packagist.org)的 TLS 证书链,常见于 Windows 环境或自定义 PHP 环境(如 WAMP/XAMPP),因为 PHP 没有正确加载 CA 证书包。
检查并设置 PHP 的 openssl.cafile 配置项
Composer 依赖 PHP 的 OpenSSL 扩展发起 HTTPS 请求,而该扩展需要知道从哪读取可信根证书。关键配置是 openssl.cafile,不是 curl.cainfo(后者只影响 curl 扩展本身,Composer 不直接用它)。
- 运行
php --ini查看当前生效的php.ini路径 - 编辑该
php.ini,取消注释或新增一行:openssl.cafile="C:/path/to/cacert.pem"
- 证书文件可从 Mozilla 官方获取:
https://curl.se/ca/cacert.pem,下载后保存为本地路径(注意用正斜杠或双反斜杠,如C:/php/cacert.pem) - 改完重启 Web 服务或 CLI 环境,再运行
php -r "print_r(openssl_get_cert_locations());"确认default_cert_file已更新
临时绕过验证(仅限调试,禁止生产环境)
不推荐长期使用,但能快速验证是否为证书问题本身:
- 在项目根目录运行:
composer config -g secure-http false
(禁用所有 HTTPS 强制要求,风险高) - 或临时指定 HTTP 源(同样不安全):
composer config -g repo.packagist composer https://packagist.org
→ 改为composer config -g repo.packagist composer http://packagist.org
- 更可控的方式是仅对当前命令跳过验证:
composer install -vvv --no-plugins --no-scripts
结合环境变量(Linux/macOS):export COMPOSER_NO_SSL=1 && composer install
;Windows:set COMPOSER_NO_SSL=1 && composer install
Windows 上 XAMPP/WAMP 用户的典型陷阱
这类集成环境常自带旧版 PHP 和孤立的 php.ini,容易忽略两个关键点:
- CLI 和 Apache 使用的是两套
php.ini:运行php --ini和访问phpinfo()页面确认路径是否一致 - 证书路径不能含中文、空格或长路径名;推荐放在简单路径如
C:/php/cacert.pem,并在php.ini中写死绝对路径 - 某些杀毒软件(如 Avast、McAfee)会劫持 HTTPS 流量并注入自己的根证书,导致系统级证书信任链异常——可尝试临时关闭实时防护测试
composer diagnose 应显示 HTTPS connection to packagist.org: OK。如果仍失败,大概率是网络中间设备(企业代理、防火墙)干扰,而非单纯证书问题。










