必须同时配置 curl.cainfo 和 openssl.cafile 为相同绝对路径且文件可读,否则 Composer 报 SSL 错误;先运行 php -r "print_r(openssl_get_cert_locations());" 确认 default_cert_file 和 ini_cafile 一致且有效,再下载最新 cacert.pem 并正确配置 php.ini。

必须同时配置 curl.cainfo 和 openssl.cafile,且路径完全一致、为绝对路径、文件可读——只配一个或路径不一致,Composer 仍会报 SSL 错误。
确认 PHP 实际加载的证书路径
别猜,先让 PHP 自己说清楚它在用什么:
运行 php -r "print_r(openssl_get_cert_locations());",重点看 default_cert_file 和 ini_cafile 两个字段:
- 如果值为空、
null、或指向一个根本不存在的路径(比如C:/php/extras/ssl/cacert.pem但该文件并不存在),OpenSSL 就不会加载任何 CA,所有 HTTPS 请求必然失败 - 如果两个字段值不一致,说明 cURL 和 OpenSSL 正在用不同的证书源,Composer 内部调用可能走其一,导致“有时行、有时不行”
- 用
ls -l /path/to/file(Linux/macOS)或dir C:\path\to\file(Windows)验证文件是否存在、大小是否 > 0 KB、权限是否为 644(Linux/macOS)或可被当前用户读取(Windows)
下载并放置最新 cacert.pem
系统自带的证书包大多已过期,2026 年主流站点(如 packagist.org)的证书链已无法被旧 CA 验证。必须用 Mozilla 维护的最新版:
- 下载地址:https://www.php.cn/link/04c165998a3bfee2c2b46a8d8840dacc
- 保存为纯文本 PEM 文件,确保开头是
-----BEGIN CERTIFICATE-----,不含 HTML、BOM 或多余空行 - 推荐路径(选一个你确定能稳定访问的):
Linux:/usr/local/share/ca-certificates/cacert.pem
macOS(Homebrew):/opt/homebrew/etc/openssl@3/cert.pem
Windows:C:/php/extras/ssl/cacert.pem(注意用正斜杠或双反斜杠)
在 CLI 的 php.ini 中统一配置
Composer 只走 PHP CLI 模式,所以必须改 CLI 实际加载的 php.ini(运行 php --ini 查看 “Loaded Configuration File”):
- 在该文件末尾添加两行,路径必须完全相同、为绝对路径、加引号(Windows 必须):
curl.cainfo = "/usr/local/share/ca-certificates/cacert.pem"openssl.cafile = "/usr/local/share/ca-certificates/cacert.pem" - Linux/macOS 下确保文件权限是 644,且 PHP 进程用户(如
www-data或当前 shell 用户)有读取权 - 改完必须重启终端(CLI 环境不会自动重载 php.ini),再跑一次
php -r "print_r(openssl_get_cert_locations());"验证两个字段是否一致且非空
自定义私有仓库证书要单独处理
如果你对接的是公司内网 HTTPS 私有仓库,ssl.cafile 配置优先级高于系统设置,但要求更严格:
- 该文件必须是完整 PEM 链:中间 CA 在前、根 CA 在后;不能混入私钥、注释或非 PEM 内容
- 必须用全局配置:
composer config --global ssl.cafile /etc/ssl/certs/company-ca.pem,项目级配置通常不生效 - Composer ≥2.5 会先尝试用这个文件初始化 OpenSSL 上下文,失败则静默 fallback 到系统默认 CA——这意味着配错路径或格式时,它不会报错,只会继续报
cURL error 60,非常容易误判
最常被忽略的一点:改完 php.ini 不重启终端,或者没确认 CLI 和 Web SAPI 是否共用同一份配置,会导致你以为配好了,其实 Composer 还在读旧环境。验证永远从 php -r "print_r(openssl_get_cert_locations());" 开始,而不是从 composer install 报错倒推。


















