根本原因是php cli环境未加载openssl扩展,需用php -m和php -i验证实际运行状态,并确保php --ini指向的php.ini中extension=openssl已启用、extension_dir正确、依赖dll存在;windows还需配置openssl.cafile与curl.cainfo指向同一cacert.pem。

Composer 报 [Composer\Exception\NoSslException] The openssl extension is required for SSL/TLS protection but is not available,根本原因不是“没装 OpenSSL”,而是 PHP 运行时没加载 openssl 扩展——哪怕 php.ini 里写了,也得验证它真在跑。
确认 openssl 扩展是否真的加载了
别只改 php.ini 就完事。CLI(命令行)和 Web(如 Apache/Nginx)可能用两套配置,而 Composer 走的是 CLI 环境。
- 运行
php -m | grep openssl:无输出 = 没加载 - 运行
php -i | grep "OpenSSL Support":返回OpenSSL Support => disabled= 加载失败 - 运行
php --ini看Loaded Configuration File路径,确保你编辑的就是这个php.ini - Windows 下还要检查
extension_dir是否指向含php_openssl.dll的目录,且libssl-1_1-x64.dll和libcrypto-1_1-x64.dll在 PHP 根目录下(缺一个就静默失败)
Windows(WAMP/XAMPP/手动安装)常见配置坑
多数报错卡在这一步:扩展名写错、CA 证书路径没配、或依赖 DLL 缺失。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
php.ini中必须是extension=openssl(PHP 7.2+),不是extension=php_openssl.dll;旧版 PHP 5.x/7.0–7.1 才用后者 - 必须设置
curl.cainfo和openssl.cafile指向同一份cacert.pem,例如:curl.cainfo="C:\php\cacert.pem"<br>openssl.cafile="C:\php\cacert.pem"
-
cacert.pem从 https://www.php.cn/link/cd6a3674478af373087f891eeb390100 下载,保存为 UTF-8 无 BOM 格式 - 改完
php.ini后,关掉所有 CMD/PowerShell 窗口再重开——否则php -v仍读旧环境
macOS / Linux 下证书路径和扩展加载逻辑
系统自带 PHP 或 Homebrew 安装的 PHP 常因证书路径不一致出问题,openssl_get_cert_locations() 返回的路径未必被 PHP 实际使用。
- 运行
php -r "print_r(openssl_get_cert_locations());"查看 PHP 认为自己该读哪;但实际生效的是openssl.cafile配置项 - Homebrew 用户建议:
brew install ca-certificates,然后在php.ini中设openssl.cafile="/opt/homebrew/etc/openssl@3/cert.pem"(路径依 OpenSSL 版本而异) - macOS 系统更新后,
/etc/ssl/cert.pem可能失效,不要硬写死这个路径 - Docker Alpine 镜像默认不兼容标准 OpenSSL 扩展,换
debian:slim基础镜像更省心
临时绕过方案(仅限调试,勿上生产)
禁用 TLS 或跳过证书校验只能帮你跑通命令,但会带来中间人劫持、包被篡改风险,某些私有源(如 Artifactory)还会直接拒绝连接。
-
composer config -g disable-tls true—— Composer 8.0+ 已废弃此配置,新版会报错 -
composer config -g secure-http false—— 强制降级 HTTP,packagist.org 等源已禁用,无效 -
COMPOSER_NO_SSL=1 composer install—— 不推荐,部分版本已忽略该环境变量 - 真正安全的临时做法:用
composer config --global cafile /path/to/cacert.pem指定证书,比关 TLS 强得多
最常被忽略的一点:PHP CLI 和 Web SAPI 使用的 php.ini 是两个文件,而 Composer 只认 CLI 的那个。很多人在 phpinfo() 里看到 OpenSSL enabled,却忘了 php -m 是另一套环境。改完配置不验证、不重启终端、不查 php --ini,等于白调。










