curl 60 错误本质是 OpenSSL 无法验证 HTTPS 证书链,常见于系统根证书过旧、企业中间人代理或 PHP 证书路径配置错误;应优先更新证书或正确配置 cafile,禁用验证仅限临时排查。

curl 60 错误本质是 OpenSSL 无法验证 HTTPS 证书链,Composer 默认启用 SSL 验证,遇到自建 CA、企业代理或过期根证书时就会报 CURLOPT_SSL_VERIFYPEER 失败(错误码 60)。
为什么 composer install 突然报 curl 60?
常见触发场景:
- 系统根证书库过旧(如 CentOS 6/7 未更新
ca-certificates) - 公司网络使用中间人代理(如 Zscaler、Blue Coat),证书由内网 CA 签发
- PHP 编译时链接了旧版 OpenSSL,或未正确加载系统证书路径
- Windows 上 PHP 使用的
openssl.cafile指向了一个不存在或不完整的 PEM 文件
检查当前 OpenSSL 和证书路径
先确认问题源头,别急着关验证:
- 运行
php -r "print_r(openssl_get_cert_locations());",看default_cert_file路径是否存在、是否可读 - 执行
curl -v https://repo.packagist.org/packages.json,观察 TLS 握手阶段是否卡在证书验证 - 如果
curl命令本身也报 60,说明是系统级问题,Composer 只是继承了它
安全修复:更新或指定可信证书 bundle
禁用 SSL 验证(composer config -g secure-http false 或改 verify-peer = false)只应作为临时排查手段,生产环境必须避免。推荐做法:
- Linux/macOS:更新系统证书包,例如
sudo update-ca-certificates(Debian/Ubuntu)或sudo yum update ca-certificates(RHEL/CentOS) - 手动指定证书路径:下载最新 Mozilla CA bundle(
https://curl.se/ca/cacert.pem),然后配置 PHP:openssl.cafile=/path/to/cacert.pem(写入php.ini) - Composer 层面覆盖:运行
composer config -g cafile /path/to/cacert.pem,该设置优先于 PHP 的openssl.cafile - Windows 用户注意:路径需用正斜杠或双反斜杠,例如
C:/php/cacert.pem或C:\\php\\cacert.pem
企业代理环境下的特殊处理
若你明确处于中间人代理环境(比如浏览器能打开 packagist,但 Composer 不行),需把代理签发的根证书加入信任链:
- 导出代理根证书(通常浏览器地址栏点击锁图标 → 证书 → 导出为 PEM 格式)
- 合并到你的 CA bundle:
cat proxy-root.crt >> cacert.pem - 再通过
composer config -g cafile /path/to/merged-cacert.pem生效 - 切勿设置
http-proxy同时又关掉 SSL 验证——这会让所有包下载裸奔在代理上
最常被忽略的是:PHP CLI 和 Web SAPI 的 php.ini 往往不同,composer 走的是 CLI 版本,务必确认你改的是对的那个 php.ini(用 php --ini 查)。证书路径一旦配错,错误表现和没配一样,但调试时容易误判。










