应配置 PHP 的 curl.cainfo 指向有效的 CA 证书文件,如下载 cacert.pem 并在 php.ini 中设置 curl.cainfo="/path/to/cacert.pem",或通过 composer config -g cafile 指定;禁用验证仅限临时调试。

Composer 安装或更新时提示 SSL certificate problem 怎么办
这是 Composer 在 HTTPS 请求时无法验证服务器证书导致的报错,典型错误信息如:cURL error 60: SSL certificate problem: unable to get local issuer certificate。根本原因不是 Composer 本身问题,而是 PHP 的 cURL 扩展找不到可信 CA 证书路径,或系统证书库过旧/缺失。
检查并设置 openssl.cafile 或 curl.cainfo
PHP 需要知道去哪里找根证书(CA bundle),否则无法验证 HTTPS 站点(如 packagist.org)的身份。优先修改 php.ini:
- 找到当前 CLI 模式下生效的
php.ini:运行php --ini查看 Loaded Configuration File - 在该文件中添加或取消注释以下任一行(推荐用
curl.cainfo,它专用于 cURL):curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
(Windows,XAMPP 示例)curl.cainfo = "/etc/ssl/certs/ca-certificates.crt"
(Linux Debian/Ubuntu)curl.cainfo = "/usr/local/etc/openssl/cert.pem"
(macOS Homebrew PHP) - 保存后重启终端,执行
php -r "print_r(openssl_get_cert_locations());"确认curl_cainfo显示为你设置的路径
临时绕过证书验证(仅限调试,禁止生产环境)
不推荐长期使用,但可快速验证是否为证书问题本身:
- 全局禁用(危险):
composer config -g secure-http false—— 这会让 Composer 允许 HTTP 包源,不解决 SSL 问题,且已从 Composer 2.2+ 默认禁用 - 临时跳过证书校验(仅本次命令):
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)不适用于 Composer 命令行;正确做法是设环境变量:export COMPOSER_CAFILE=/path/to/cacert.pem
或 Windows:set COMPOSER_CAFILE=C:\path\to\cacert.pem
- 最直接的临时方案(不改配置):
composer install --no-secure-http(Composer 2.5+ 支持,但仅对包源协议降级,不解决 cURL 层证书失败)
下载并指定最新 CA 证书文件
如果系统没有维护良好的证书库,手动下载 Mozilla CA Bundle 是最稳妥的补救方式:
- 从 https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251 下载
cacert.pem(纯文本 PEM 格式) - 保存到一个固定路径,例如:
/opt/php/cacert.pem(Linux/macOS)或C:\php\cacert.pem(Windows) - 在
php.ini中设置:curl.cainfo = "/opt/php/cacert.pem"
- 或者通过 Composer 自身配置(优先级低于 php.ini,但无需改 PHP 配置):
composer config -g cafile /opt/php/cacert.pem - 注意:每次更新 PHP 版本或重装环境,都要重新检查该路径是否存在、权限是否可读(尤其 Linux 上 www-data 用户需有读权限)










