应配置 PHP 的 curl.cainfo 指向有效的 CA 证书文件,如下载 cacert.pem 并在 php.ini 中设置 curl.cainfo="/path/to/cacert.pem",或通过 composer config -g cafile 指定;禁用验证仅限临时调试。
Composer 安装或更新时提示 SSL certificate problem 怎么办
这是 Composer 在 HTTPS 请求时无法验证服务器证书导致的报错,典型错误信息如:
。根本原因不是 Composer 本身问题,而是 PHP 的 cURL 扩展找不到可信 CA 证书路径,或系统证书库过旧/缺失。
检查并设置
或
PHP 需要知道去哪里找根证书(CA bundle),否则无法验证 HTTPS 站点(如 packagist.org)的身份。优先修改
:
找到当前 CLI 模式下生效的
:运行
查看 Loaded Configuration File
在该文件中添加或取消注释以下任一行(推荐用
,它专用于 cURL):
(Windows,XAMPP 示例)
(Linux Debian/Ubuntu)
(
mac
OS Homebrew PHP)
保存后重启终端,执行
确认
显示为你设置的路径
临时绕过证书验证(仅限调试,禁止生产环境)
不推荐长期使用,但可快速验证是否为证书问题本身:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
全局禁用(危险):
—— 这会让 Composer 允许 HTTP 包源,不解决 SSL 问题,且已从 Composer 2.2+ 默认禁用
临时跳过证书校验(仅本次命令):
不适用于 Composer 命令行;正确做法是设
环境变量
:
或 Windows:
最直接的临时方案(不改配置):
(Composer 2.5+ 支持,但仅对包源协议降级,不解决 cURL 层证书失败)
下载并指定最新 CA 证书文件
如果系统没有维护良好的证书库,手动下载 Mozilla CA Bundle 是最稳妥的补救方式:
从
https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251
下载
(纯文本 PEM 格式)
保存到一个固定路径,例如:
(Linux/macOS)或
(Windows)
在
中设置:
或者通过 Composer 自身配置(优先级低于
php
.ini,但无需改 PHP 配置):
注意:每次更新 PHP 版本或重装环境,都要重新检查该路径是否存在、权限是否可读(尤其 Linux 上 www-data 用户需有读权限)
证书路径配置错一个字符、文件被覆盖成空、权限为 000、或用了过期的 PEM 文件——这些细节比“关掉验证”更容易被忽略,也更常导致反复失败。
cURL error 60: SSL certificate problem: unable to get local issuer certificateopenssl.cafilecurl.cainfophp.iniphp.iniphp --inicurl.cainfocurl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"curl.cainfo = "/etc/ssl/certs/ca-certificates.crt"curl.cainfo = "/usr/local/etc/openssl/cert.pem"php -r "print_r(openssl_get_cert_locations());"curl_cainfocomposer config -g secure-http falsecurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)export COMPOSER_CAFILE=/path/to/cacert.pemset COMPOSER_CAFILE=C:\path\to\cacert.pemcomposer install --no-secure-httpcacert.pem/opt/php/cacert.pemC:\php\cacert.pemphp.inicurl.cainfo = "/opt/php/cacert.pem"composer config -g cafile /opt/php/cacert.pem