Composer install 报错 cURL error 60 是因 OpenSSL 证书验证失败,主因是本地 CA 证书过旧/缺失或 OpenSSL 版本过低(需 ≥1.1.1),应优先检查 OpenSSL 版本、CA 文件路径可读性及 Composer 实际使用的证书源。

Composer install 报错 cURL error 60: SSL certificate problem
这是最典型的 OpenSSL 证书验证失败现象,不是网络不通,而是 Composer 用的 cURL 拒绝了服务器的 TLS 证书——通常因为本地 CA 证书包过旧、缺失,或系统 OpenSSL 版本太老不支持目标站点的加密套件。
实操优先检查这三点:
- 运行
openssl version -a,确认 OpenSSL 版本 ≥ 1.1.1(低于 1.0.2g 已不安全且不兼容现代 TLS 1.2/1.3) - 执行
php -r "print_r(openssl_get_cert_locations());",看capath和default_cert_file路径是否存在、可读;常见问题:路径指向空目录或已删除的ca-bundle.crt - 临时测试是否是证书问题:在项目根目录运行
composer install --no-plugins --no-scripts -vvv,观察错误中是否出现unable to get local issuer certificate或self signed certificate in certificate chain
Windows 下 php.ini 中 openssl.cafile 配置失效
Windows PHP 常见陷阱:即使你手动设置了 openssl.cafile="C:\php\extras\ssl\cacert.pem",Composer 仍可能忽略它——因为 Composer 启动时会绕过 php.ini 的 OpenSSL 配置,直接调用系统 cURL 库。
真正生效的方式只有两个:
- 下载最新 cacert.pem,保存为本地路径(如
C:\php\cacert.pem),然后在命令行显式指定:set COMPOSER_CAFILE=C:\php\cacert.pem(CMD)或$env:COMPOSER_CAFILE="C:\php\cacert.pem"(PowerShell) - 修改 Composer 全局配置:
composer config -g cafile C:\php\cacert.pem(该配置写入%COMPOSER_HOME%\config.json,优先级高于 php.ini) - 避免用
curl.cainfo—— Composer 不读这个 ini 项
Linux/macOS 上 /etc/ssl/certs/ca-certificates.crt 权限或内容异常
很多发行版(Ubuntu/Debian/CentOS)把 CA 证书统一托管在 /etc/ssl/certs/ca-certificates.crt,但以下情况会导致 Composer 失效:
- 文件被意外清空或 chmod 为 000(
ls -l /etc/ssl/certs/ca-certificates.crt确认权限至少是 444) - 系统更新后未运行
update-ca-certificates(Debian/Ubuntu)或trust extract-compat(RHEL/Fedora),导致新证书未合并进 bundle - PHP 运行用户(如 www-data、nginx)无权读取该文件(尤其当 SELinux 或 AppArmor 启用时)
快速修复命令:sudo update-ca-certificates --fresh && sudo systemctl restart php-fpm(如适用)
绕过证书验证只是临时手段,切勿长期使用
设置 composer config -g secure-http false 或 export COMPOSER_DISABLE_TLS=1 能跳过 HTTPS 校验,但会让所有包下载走明文 HTTP,存在中间人劫持和恶意包注入风险。
更危险的是改 php.ini 中 curl.cainfo 指向一个空文件或自签名证书——这不会“修复”问题,只会让所有 TLS 连接都静默失败或降级。
真正要盯住的,是 OpenSSL 版本、CA 文件路径是否真实可读、以及 Composer 是否真的在用你认为它在用的那个证书源。调试时多看 -vvv 输出里那句 Downloading https://repo.packagist.org/packages.json 后面紧跟着的 cURL 错误详情,比猜快得多。


















