根本原因是PHP的OpenSSL或cURL无法验证HTTPS证书链,90%问题可通过统一配置openssl.cafile和curl.cainfo指向最新cacert.pem解决;需用php -r "print_r(openssl_get_cert_locations());"确认路径有效性,并严格按规范设置绝对路径。

根本原因不是Composer本身,而是PHP底层的OpenSSL或cURL无法验证HTTPS证书链。直接改镜像或关TLS只是掩盖问题,90%的case靠统一配置openssl.cafile和curl.cainfo就能解决。
先确认PHP当前用的CA证书路径是否有效
别猜、别翻php.ini,直接运行命令让PHP自己说:
php -r "print_r(openssl_get_cert_locations());"
重点看两个字段:
-
default_cert_file:如果为空、路径不存在、或文件大小为0,说明PHP没找到可用证书 -
ini_cafile:如果为空或指向一个2021年前的cacert.pem(比如XAMPP自带的),大概率不认识ISRG Root X1等新根证书 - 用
ls -l /path/to/file(Linux/macOS)或dir C:\path\to\file(Windows)验证文件是否存在且可读
下载并统一配置最新cacert.pem
必须用curl.se官方维护的证书包,地址是https://curl.se/ca/cacert.pem。其他来源(如中文站、旧版XAMPP附带)基本都已失效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS建议存到:
/usr/local/etc/php/cacert.pem - Windows建议存到:
C:/php/cacert.pem(用正斜杠或双反斜杠,避免单反斜杠) - 在CLI实际生效的
php.ini(运行php --ini查“Loaded Configuration File”)末尾添加两行,路径必须完全一致:
openssl.cafile="/usr/local/etc/php/cacert.pem" curl.cainfo="/usr/local/etc/php/cacert.pem"
注意:两个值不能有空格、不能少引号、不能用相对路径;改完后重启终端或服务进程。
临时绕过方案只适用于调试,且效果有限
禁用TLS验证在现代Composer版本中越来越不可靠,很多命令会直接拒绝执行:
-
composer config --global disable-tls true:这个开关控制的是“是否强制仓库用HTTPS”,不等于跳过证书校验 -
composer install --no-secure-http:同上,对SSL3_GET_SERVER_CERTIFICATE类错误基本无效 - 真正能绕过证书校验的是环境变量:
COMPOSER_NO_SSL=1(Linux/macOS)或set COMPOSER_NO_SSL=1(Windows CMD) - 但只要PHP的
openssl.cafile或curl.cainfo配置错误,这类绕过仍可能失败
最常被忽略的一点:Windows用户容易把cacert.pem放在C:\php\extras\ssl\这种路径下,但PHP安装包里该目录根本不存在——得手动创建,且要确保文件权限允许读取。路径错一个字符、多一个空格、引号不闭合,PHP都不会报错,但配置就是不生效。

















