php cli环境未加载curl或openssl扩展,需确认php --ini路径并在对应php.ini中启用extension;curl error 60主因是curl.cainfo指向无效ca证书文件,须下载最新cacert.pem并同步配置curl.cainfo与openssl.cafile。

php -m 看不到 curl 或 openssl 扩展
这不是 Composer 问题,是 PHP CLI 环境根本没加载这两个扩展。常见于 Windows XAMPP 新装、Linux 容器镜像(如 Alpine)、或用 phpbrew/asdf 切换 PHP 版本后未启用扩展。
- 运行
php --ini确认 CLI 实际加载的php.ini路径(别改错 Apache 或 Nginx 用的那个) - 在该
php.ini中取消注释:extension=curl和extension=openssl(Linux/macOS 可能是extension=openssl.so,Windows 是php_curl.dll/php_openssl.dll) - Alpine Docker 用户需额外安装:
apk add php82-curl php82-openssl(版本号按实际 PHP 版本调整) - 改完必须重启终端或 CLI 进程——
php -m | grep -E "curl|openssl"再确认是否出现
cURL error 60: SSL certificate problem
报这个错,99% 是 curl.cainfo 指向了空路径、过期文件或根本不存在的 PEM 文件。PHP 的 cURL 不会自动读系统证书,必须显式指定。
- 先查当前配置:
php -r "print_r(openssl_get_cert_locations());",重点看curl_cainfo和default_cert_file的值 - Linux/macOS 推荐路径:
curl.cainfo = "/etc/ssl/certs/ca-certificates.crt"(Ubuntu/Debian)或"/usr/local/etc/openssl@3/cert.pem"(Homebrew OpenSSL 3) - Windows 必须用正斜杠或双反斜杠:
curl.cainfo = "C:/php/extras/ssl/cacert.pem",不能写成C:\php\...(单反斜杠会被截断) - 证书文件可从 https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251 下载,保存为
cacert.pem后填入路径 - 改完
php.ini后,关掉当前终端重开,再跑php -r "print_r(openssl_get_cert_locations());"验证路径是否生效
composer diagnose 提示 “OpenSSL extension enabled but unable to verify certificates”
这说明 openssl 扩展已加载,但 PHP 找不到可信根证书——不是扩展没开,是信任链断了。常见于 macOS 升级、Docker Alpine 镜像、或 PHP 编译时绑定了旧 OpenSSL 库。
- 检查 PHP 编译参数:
php -i | grep "Configure Command",如果含--with-openssl=/usr,很可能绑的是系统老旧 OpenSSL(如 1.0.2) - macOS Homebrew 用户应执行:
brew install ca-certificates && brew link --force ca-certificates,再设openssl.cafile = "/usr/local/etc/openssl/cert.pem" - Docker 用户避免用
alpine:3.14这类老镜像;改用php:8.3-cli或手动apk add ca-certificates - 不要只配
curl.cainfo,openssl.cafile也要同步设为同一 PEM 文件路径,两者优先级不同但都可能被用到
临时绕过 SSL 验证仅限开发机调试
生产环境、CI/CD、团队协作机器上禁用 TLS 验证等于主动暴露依赖源风险。临时方案只能用于快速定位是不是证书问题本身。
- 全局禁用(危险!):
composer config -g secure-http false→ 此后所有仓库允许 HTTP,且跳过证书校验 - 单次命令禁用:
composer install --no-secure-http或COMPOSER_NO_SECURE_HTTP=1 composer update - 更细粒度控制(仅对 Packagist):
composer config -g repos.packagist.org '{"url": "http://packagist.org", "type": "composer"}' - 注意:
secure-http关闭后,Composer 会接受 HTTP 源,但私有仓库若仍用 HTTPS,其证书错误依然会报错
php.ini 没重启 CLI 进程,或者路径里混用了单反斜杠、大小写不一致、文件权限不对——这些细节比选哪个镜像源更容易导致失败。











