答案是:90%因cli模式下php未加载openssl扩展,需确认php.ini路径、启用extension=openssl、验证模块文件存在、配对ca证书路径并重启终端。

Composer 报 The openssl extension is required,90% 不是 Composer 本身坏了,而是你当前 CLI 模式下运行的 PHP 根本没加载 openssl 扩展——补上扩展 + 配对证书路径,5 分钟内可解,不用换镜像、不重装 PHP。
php -m 里没 openssl,但 php.ini 已取消注释?确认 CLI 实际加载的配置文件
很多人改了 php.ini 却没生效,因为 CLI 和 Web 用的是两套配置。先执行:
php --ini
看 Loaded Configuration File 输出的真实路径。常见坑包括:
- Windows 下误改了
php.ini-development或php.ini-production,但实际加载的是未重命名的php.ini - Linux/macOS 用
phpbrew或asdf切换版本后,php命令指向旧版,而新版php.ini根本没被读取 - Docker 容器里
php --ini显示none,说明没挂载或没生成配置文件
extension=openssl 启用了,但 php -m 还是不显示?验证模块文件是否存在且可加载
启用配置 ≠ 模块可用。需分系统检查:
- Linux/macOS:运行
php -r "new \OpenSSLAsymmetricKey(); echo 'OK';",若报Class 'OpenSSLAsymmetricKey' not found,说明扩展虽加载但类不可用,大概率是编译时漏了--with-openssl;用php -i | grep Configure看编译参数是否含--with-openssl - Windows:确认
php_openssl.dll真在extension_dir指向的目录下(如C:\php\ext\),同时检查libcrypto-*.dll和libssl-*.dll是否存在于 PHP 根目录或System32;缺任一 DLL,扩展会静默失败 - Alpine Linux:必须
apk add php7-openssl(注意版本号匹配),仅apk add openssl不够
openssl 扩展已加载,但 composer install 仍报 certificate verify failed?证书路径没配对
扩展开了 ≠ 信任链就通了。PHP OpenSSL 默认不自带 CA 包,必须显式指定路径。关键动作:
- 先查 PHP 当前信任位置:
php -r "print_r(openssl_get_cert_locations());",重点看default_cert_file是否为空、路径是否真实存在、文件大小是否 > 0 - Windows:下载最新
cacert.pem(推荐 https://curl.se/ca/cacert.pem),保存为绝对路径(如C:/php/extras/ssl/cacert.pem),然后在 CLI 生效的php.ini末尾加两行(必须完全一致):curl.cainfo="C:/php/extras/ssl/cacert.pem"<br>openssl.cafile="C:/php/extras/ssl/cacert.pem"
- Linux/macOS:Homebrew 用户常用路径是
/opt/homebrew/etc/ca-certificates/cert.pem,Debian/Ubuntu 推荐用系统路径但要验证:ls -l /etc/ssl/certs/ca-certificates.crt,若为 broken symlink,先sudo update-ca-trust - 改完必须关掉当前终端、新开一个——CLI 配置不重启终端不会刷新
临时能跑但长期不稳定?别跳过 openssl 版本与系统库的绑定检查
即使扩展和证书都配好了,如果底层 OpenSSL 库太老(如 OpenSSL 1.0.2 或更早),仍会在连接 Packagist 时因 TLS 1.3 或 ISRG Root X1 证书不被支持而失败。验证方式:
- 查系统 OpenSSL:
openssl version -a - 查 PHP 绑定的 OpenSSL:
php -i | grep -i "openssl version",两者应接近(差一个小版本可接受,但不能跨大版本,如 1.0.x vs 3.x) - Ubuntu/Debian 上若用系统包管理器安装 PHP,升级 OpenSSL 后需重装
php*-openssl包(如sudo apt install --reinstall php8.2-openssl) - macOS M1/M2 + Homebrew:若
php -i显示--with-openssl=/opt/homebrew/opt/openssl@3,但证书路径仍指向旧位置,需同步更新openssl.cafile
最常被忽略的点:Docker 镜像里 php --ini 显示配置文件路径,但该文件可能被 COPY 覆盖或挂载时权限不足,导致 extension=openssl 实际没生效——直接进容器 cat 一下那个文件最可靠。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











