composer报错60怎么办_composer解决curl证书报错方法

2次阅读

错误原因是 PHP 的 curl 扩展找不到可信 CA 证书链,解决方法是正确配置 php.ini 中的 curl.cainfo 指向有效的 PEM 文件,或临时禁用 ssl 验证(仅调试用)。

composer报错60怎么办_composer解决curl证书报错方法

curl: (60) SSL certificate problem: unable to get local issuer certificate

这是 composerwindows 或某些 linux 环境下最典型的证书验证失败报错,本质不是 Composer 本身的问题,而是 PHP 的 cURL 扩展找不到可信的 CA 证书链。它常发生在刚装完 XAMPP、WAMP、或手动编译 PHP 后未配置证书路径时。

核心解决思路只有两个方向:告诉 cURL 去哪找证书(推荐),或者临时关掉证书验证(仅调试用,不安全)。

  • 优先检查 php.ini 中是否设置了 curl.cainfo:打开你的 php.ini 文件,搜索 curl.cainfo,确认它指向一个真实存在的 PEM 文件,例如:c:xamppapachebincacert.pem/etc/ssl/certs/ca-certificates.crt
  • 如果没设置,去 https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251 下载最新 cacert.pem,保存到本地某路径(比如 C:phpcacert.pem),然后在 php.ini 中写入:curl.cainfo = "C:phpcacert.pem"
  • 改完 php.ini 必须重启 Web 服务或 CLI 环境(比如重启 Apache、或重新打开终端),否则不生效
  • 验证是否生效:运行 php -r "print_r(curl_version());",看输出里 features 是否含 CURL_VERSION_SSL;再运行 php -r "var_dump(openssl_get_cert_locations());",确认 default_cert_file 路径和你设的 curl.cainfo 一致

composer install/update 报错 60 但 php -v 正常

这说明 PHP CLI 和 Web Server(如 Apache)可能用了不同的 php.ini,而 Composer 走的是 CLI 的配置。很多人只改了 Apache 的 php.ini,却忘了 CLI 的那一份。

快速定位你当前 Composer 用的是哪个 php.ini

  • 运行 php --ini,看输出的 “Loaded Configuration File” 路径
  • 运行 composer diagnose,它会明确告诉你 “The openssl extension is loaded” 和 “The curl extension is loaded”,但不会说证书路径对不对——所以仍要靠 php --ini + curl.cainfo 双重确认
  • Windows 上常见陷阱:XAMPP 的 CLI php.ini 默认在 xamppphpphp.ini,而 Apache 用的是 xamppapachebinphp.ini,两者是独立文件

临时绕过证书验证(仅限离线/测试环境)

不推荐长期使用,但当你在受限网络、内网代理、或快速验证是否真是证书问题时,可以加参数跳过验证:

  • 给单条命令加 -d openssl.cafile=(空值):php -d openssl.cafile= composer install
  • 或直接禁用 cURL 的 SSL 验证(更粗暴):php -d curl.cainfo= composer update
  • 注意:COMPOSER_DISABLE_TLS=1 环境变量也有效,但它会降级为 http 协议,存在中间人风险,别在 CI 或生产机器上设成全局

Linux/macos 下 ca-certificates 更新后仍报错 60

系统级证书更新了,但 PHP 的 cURL 没读到新位置,尤其常见于 docker 容器、ubuntu 22.04+、或自编译 PHP。

  • 先查系统证书路径:openssl version -d 输出的 OPENSSLDIR 通常是 /usr/lib/ssl,里面应有 certs/ca-certificates.crt
  • 检查 curl.cainfo 是否指向该路径,例如:curl.cainfo = "/etc/ssl/certs/ca-certificates.crt"
  • 某些 Alpine Linux 容器默认没装 ca-certificates 包,需先运行 apk add ca-certificatesupdate-ca-certificates
  • PHP-FPM 场景下,改完 php.ini 后必须重启 php-fpm 进程,service php-fpm restartsystemctl restart php-fpm

证书路径一旦配错,所有基于 cURL 的 PHP 操作(不只是 Composer)都会出 60 错,包括 Guzzle、file_get_contents https 请求。最容易被忽略的是:CLI 和 Web SAPI 的 php.ini 分离、Docker 容器里证书文件权限为只读、以及改完配置忘记重启进程。

text=ZqhQzanResources