根本原因是php未加载有效ca证书文件,需通过php -r "print_r(openssl_get_cert_locations());"确认default_cert_file路径,下载官方cacert.pem并同步配置php.ini中openssl.cafile与curl.cainfo为同一绝对路径。

composer 因 SSL 证书过期无法下载,根本不是镜像源“不信任”或需要切换什么“信任模式”——**是 PHP 底层压根没加载有效的 CA 证书文件,导致所有 HTTPS 请求(包括访问 packagist.org、阿里云镜像、腾讯云镜像)全部失败**。强行改 secure-http 或换镜像域名只是绕开症状,解决不了验证链断裂这个核心问题。
php -r "print_r(openssl_get_cert_locations());" 看清 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/phpEnv 自带的老包)、/usr/local/etc/php/cacert.pem(Homebrew PHP 未更新时)。
openssl.cafile 和 curl.cainfo 必须同时设、路径完全一致
Composer 依赖 PHP 的 cURL 和 OpenSSL 扩展发起 HTTPS 请求,这两个扩展各自读一个配置项:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
openssl.cafile控制 OpenSSL 层(如file_get_contents、stream_context_create) -
curl.cainfo控制 cURL 层(Composer 默认 HTTP 客户端底层) - 只配一个?大概率仍有报错;路径写错(比如漏
.pem、用相对路径、单反斜杠 在 Windows 下被当转义符)?照样失败
下载最新
cacert.pem(来源必须是 curl.se 官方),存到稳定绝对路径,例如:/usr/local/etc/php/cacert.pem 或 C:/php/extras/ssl/cacert.pem,然后在 php.ini 中写:openssl.cafile="/usr/local/etc/php/cacert.pem"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 或 certificate verify failed 的是 PHP 原生 cURL 或 OpenSSL 扩展,它们完全不读 Composer 的配置。
-
composer config -g secure-http false更危险:Packagist 自 2022 年起强制 HTTPS,设了这个反而会让composer install直接退出 -
export COMPOSER_NO_SSL=1是全局后门,容易忘记清理,CI 环境里尤其隐蔽 - 临时跳过(如
composer install --no-secure-http)仅限单次调试,不能解决任何根本问题
系统级 CA 更新是兜底动作,但不能替代 php.ini 配置
Ubuntu/Debian 运行 sudo apt install --reinstall ca-certificates && sudo update-ca-certificates,macOS Homebrew 运行 brew reinstall ca-certificates,这些操作确实能修复系统 curl 和部分 CLI 工具,但 PHP CLI 和 Web SAPI 往往不复用系统证书路径——尤其是 Windows、Docker、phpEnv 等环境,PHP 自带的 curl-ca-bundle.crt 或空 cacert.pem 仍是默认 fallback。所以:
- 系统更新 +
php.ini显式配置,双保险 - 只做系统更新,PHP 可能仍读自己目录下的旧文件
- 只改
php.ini,不更新系统 CA,其他工具(如git clone https://...)可能继续出问题
php -r "var_dump(openssl_get_cert_locations());" 输出的路径要存在且可读,再跑一次 composer install。
真正卡住人的,从来不是“要不要换镜像”,而是 PHP 没加载对证书文件——那个路径你得亲手确认、亲手写对、亲手重启。










