SSL certificate problem 是 PHP 的 OpenSSL 配置问题,不是 Composer 的 bug;根本原因是 PHP 的 openssl 或 cURL 扩展找不到或无法读取可信 CA 证书,需正确配置 php.ini 中的 openssl.cafile 和 curl.cainfo 并重启对应进程。

SSL certificate problem 是 PHP 的 OpenSSL 配置问题,不是 Composer 的 bug
Composer 报 SSL certificate problem: unable to get local issuer certificate 或 CURLOPT_SSL_VERIFYPEER failed,根本原因不在 Composer 本身,而是 PHP 的 openssl 或 cURL 扩展找不到可信 CA 证书,或证书过期。浏览器能打开 https://packagist.org 而 Composer 不行,正是这个分水岭——浏览器用系统证书,PHP 默认不共享。
- 先确认是不是它:运行
php -r "print_r(openssl_get_cert_locations());",看default_cert_file指向的文件是否存在、可读、内容非空 - 再验证底层 curl:运行
curl -v https://packagist.org/packages.json,如果也报 SSL 错误,说明是系统/PHP 层级问题,不是 Composer 特有 - 别急着改
composer config --global cafile—— 它只影响 Composer 自己的 HTTP 客户端(php-http),而绝大多数 SSL 失败发生在cURL或OpenSSL扩展层,该配置完全不生效
改对 php.ini 里的 openssl.cafile 或 curl.cainfo
这才是真正起效的配置项。必须用绝对路径,且要确保你改的是 CLI 模式下实际加载的 php.ini(运行 php --ini 看 Loaded Configuration File)。
- 下载权威证书包:
wget https://curl.se/ca/cacert.pem(Linux/macOS)或手动访问https://curl.se/ca/cacert.pem保存为本地文件,例如/usr/local/etc/php/cacert.pem(macOS/Linux)或C:\php\extras\ssl\cacert.pem(Windows) - 编辑
php.ini,添加两行(路径按实际替换):openssl.cafile="/usr/local/etc/php/cacert.pem"curl.cainfo="/usr/local/etc/php/cacert.pem" - 改完必须重启:CLI 下关掉终端重开;Web 环境需重启 Apache/Nginx 或 php-fpm;否则配置白改
- 验证是否生效:
php -i | grep -E 'curl.cainfo|openssl.cafile'应输出你刚写的路径;php -r "var_dump(file_get_contents(ini_get('curl.cainfo')) !== false);"应返回bool(true)
为什么不能只设 curl.cainfo 或只设 openssl.cafile?
PHP 的 HTTPS 请求路径不唯一:cURL 扩展走 curl.cainfo,而部分流封装器(如 file_get_contents("https://..."))、或某些 Composer 插件可能直调 OpenSSL,走 openssl.cafile。两者都配齐才兜得住。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 常见漏配场景:
XAMPP的php.ini里curl.cainfo被注释,或指向已失效的curl-ca-bundle.crt;Homebrew安装的 PHP 可能压根没设openssl.cafile,只依赖系统证书但未链接过去 - Linux 用户注意:
/etc/ssl/certs/ca-certificates.crt是 Debian/Ubuntu 标准路径,但若证书陈旧,应先运行sudo update-ca-certificates再配;Fedora/RHEL 用户用sudo trust extract --system - macOS Homebrew 用户:确保
ca-certificates已安装并强制链接:brew install ca-certificates && brew link --force ca-certificates,再配curl.cainfo = "/usr/local/etc/openssl/cert.pem"
临时绕过仅限排查,且必须用对方式
生产环境禁用 SSL 验证等于裸奔——凭据、包哈希、签名全暴露给中间人。但调试时快速验证是否为证书问题,可用以下安全边界清晰的方式:
- 单次命令跳过(最推荐):
COMPOSER_DISABLE_TLS=1 composer install(Linux/macOS)或set COMPOSER_DISABLE_TLS=1 && composer install(Windows CMD)。退出终端即失效,不会污染全局 - 别用
composer config --global secure-http false:它会让 Composer 允许 HTTP 源,而 Packagist 已强制 HTTPS,且此设置对所有仓库生效,风险不可控 - 更隐蔽的坑:
export COMPOSER_NO_SSL=1(旧版兼容变量),容易忘记 unset,建议只在子 shell 中用:(export COMPOSER_NO_SSL=1; composer update)
真正麻烦的不是配错路径,而是配了却没重启进程、或者改了 Web SAPI 的 php.ini 却在 CLI 下测试——这两个点,90% 的人至少踩中一个。

















