根本不是镜像问题,而是PHP底层未加载可信CA证书;需在CLI生效的php.ini中同时配置curl.cainfo和openssl.cafile指向同一绝对路径的最新cacert.pem文件,并重启终端或服务验证。

根本不是镜像的问题,而是 PHP 底层没加载可信 CA 证书——修对 php.ini 里的 curl.cainfo 和 openssl.cafile 才能真正解决。
怎么确认是证书链不完整,而不是网络或镜像配置问题
别急着换镜像或清缓存,先让 PHP 自己说话:
- 运行
php -r "print_r(openssl_get_cert_locations());",重点看default_cert_file和ini_cafile是否为空、路径是否存在、文件大小是否 > 0 - 再跑
curl -v https://mirrors.aliyun.com/composer/packages.json:如果也报SSL certificate problem: unable to get local issuer certificate,说明是 PHP/cURL 层级失效,和 Composer 配置无关 - 执行
php --ini确认你正在编辑的是 CLI 模式下真正生效的php.ini(尤其 phpEnv、XAMPP、Homebrew 环境常有多个)
必须同时配 curl.cainfo 和 openssl.cafile 指向同一文件
PHP 内部 HTTPS 请求分两路:一部分走 cURL 扩展,一部分走 OpenSSL 扩展(比如 stream context 场景)。只设一个,另一路仍会 fallback 到空信任链。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 下载最新
cacert.pem:curl -sS https://curl.se/ca/cacert.pem -o /path/to/cacert.pem(Windows 推荐存到C:/php/extras/ssl/cacert.pem;macOS/Linux 推荐/usr/local/etc/php/cacert.pem) - 在
php.ini中添加两行(路径必须是绝对路径、英文双引号包裹、避免单反斜杠):curl.cainfo = "C:/php/extras/ssl/cacert.pem"openssl.cafile = "C:/php/extras/ssl/cacert.pem" - 改完保存,关闭当前终端、新开一个(CLI 下不热加载,PHP 进程必须重载上下文)
为什么 composer config -g cafile 经常不起作用
这条命令只影响 Composer 自己封装的 HTTP 客户端(基于 php-http),但实际发起 HTTPS 请求的是 PHP 的 cURL 或 OpenSSL 扩展——它无法覆盖 curl.cainfo 的优先级,也不能修复底层 TLS 握手失败。
-
composer diagnose可能显示 “CA file configured”,但composer install依然报错,就是典型表现 - 它对 Git 克隆、插件调用、或任何绕过 Composer HTTP 客户端的操作完全无效
- 仅当
php.ini未统一配置时,可作为临时兜底:composer config -g cafile "C:/php/extras/ssl/cacert.pem"
镜像站本身证书链不全怎么办
部分国内镜像站(尤其较老部署)可能未正确配置完整证书链(missing intermediate CA),而新版 OpenSSL 默认要求严格链验证。此时即使根证书有效,也会报 unable to get local issuer certificate。
- 这不是你本地证书旧,而是对方服务器配置缺陷。临时绕过风险高,应优先反馈镜像方修复
- 若急需使用,可对 Composer 单次命令禁用链验证(仅限调试):
COMPOSER_DISABLE_TLS=1 composer install - 注意:
COMPOSER_DISABLE_TLS=1仅对当前命令生效,不影响全局配置;但若镜像已强制 HTTPS 且证书错误,此法仍会失败
最易被忽略的点:路径含中文、空格或使用相对路径时,PHP 会静默失败;改完 php.ini 没重启 CLI 进程,命令行下 composer 直接调用 PHP CLI,需关掉所有终端重开。

















