根本原因是php的openssl和curl未加载有效ca证书文件;需用php -r "print_r(openssl_get_cert_locations());"确认default_cert_file和ini_cafile路径,确保openssl.cafile与curl.cainfo在php.ini中指向同一绝对路径的最新cacert.pem,并校验权限与镜像源配置格式。

根本不是 Composer 的问题,是 PHP 底层 OpenSSL 和 cURL 没加载有效的 CA 证书文件。
怎么确认 PHP 正在用哪个证书文件
别猜路径,让 PHP 自己说:php -r "print_r(openssl_get_cert_locations());"。重点看两项:
-
default_cert_file:PHP 默认尝试读的路径,如果为空、指向不存在的文件、或文件大小为 0,就是病灶 -
ini_cafile:来自php.ini的显式配置,如果和default_cert_file不一致,说明配置没生效,或加载了错误的php.ini
常见失效路径:/etc/ssl/certs/ca-certificates.crt(旧版 Ubuntu)、C:/php/extras/ssl/cacert.pem(XAMPP/WAMP 自带的老包)、/usr/local/etc/php/cacert.pem(Homebrew PHP 未更新时)
openssl.cafile 和 curl.cainfo 必须同时设、路径完全一致
Composer 同时依赖 PHP 的 cURL 和 OpenSSL 扩展发起 HTTPS 请求,这两个扩展各自读一个配置项:
-
openssl.cafile控制 OpenSSL 层(如file_get_contents、stream_context_create) -
curl.cainfo控制 cURL 层(Composer 默认 HTTP 客户端底层)
只配一个?大概率仍有报错;路径写错(比如漏 .pem、用相对路径、Windows 下单反斜杠被当转义符)?照样失败。
正确做法:
- 从 https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251 下载最新
cacert.pem - 存到稳定绝对路径,例如:
/usr/local/etc/php/cacert.pem或C:/php/extras/ssl/cacert.pem - 在
php.ini中写两行,路径必须一模一样:openssl.cafile="/usr/local/etc/php/cacert.pem"<br>curl.cainfo="/usr/local/etc/php/cacert.pem"
- Windows 路径务必用正斜杠
/或双反斜杠\,别用单反斜杠
别信 composer config --global cafile
很多人试过 composer config -g cafile "/path/to/cacert.pem",但依然报错——因为该配置只影响 Composer 自封装的 HTTP 客户端(如 php-http 驱动),而实际触发 cURL error 60 的是底层 cURL 或 stream 扩展,它们根本不读这个配置。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
验证是否真正生效的方法只有两个:
- 运行
php -r "print_r(openssl_get_cert_locations());"看输出是否匹配你写的路径 - 执行
curl -I https://packagist.org,如果也失败,说明是 PHP 环境级问题,不是 Composer 单独能绕过的
镜像源配置错误会静默回退到官方源
你以为在连阿里云,其实连的是已被审查或证书过期的官方站——因为镜像 URL 缺 type 或结尾 /,Composer 就会静默 fallback。
错的写法:composer config -g repo.packagist https://mirrors.aliyun.com/composer(缺 type,缺结尾 /)
对的写法:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否生效:composer config -g repo.packagist,输出必须是完整 JSON:
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
项目级更稳妥:composer config repo.packagist composer https://mirrors.aliyun.com/composer/,会自动写进 composer.json 的 repositories 字段
最容易被忽略的一点:证书文件权限。尤其在 Linux/macOS 上用 nginx/php-fpm 时,www-data 或 _www 用户可能无权读取你放在家目录下的 cacert.pem;Windows 上则要留意路径中不能有空格或中文字符。路径对了、内容对了、格式对了,权限不对照样报错。










