Composer 报错“OpenSSL extension is required”表明 PHP 未启用 OpenSSL 扩展,需先用 php -m | grep openssl 验证是否加载,再检查 php.ini 中 extension=openssl(Windows 为 php_openssl.dll)是否启用、DLL 文件及依赖库是否存在,Linux/macOS 需安装对应系统包,Docker Alpine 需 apk add openssl,最后用 composer diagnose 和 create-project 实际测试 HTTPS 连接。

Composer 报错 “OpenSSL extension is required” 或 “file_get_contents(): SSL operation failed”,说明 PHP 当前没有启用 OpenSSL 扩展,Composer 无法安全连接 HTTPS 源(如 packagist.org)。
确认 OpenSSL 是否真的未启用
别急着改配置,先验证问题根源:
- 运行
php -m | grep openssl—— 若无输出,扩展未加载 - 运行
php -i | grep "openssl"—— 查看是否显示openssl support => enabled - 检查
php.ini中是否存在extension=openssl(Windows 下可能是extension=php_openssl.dll),且该行**未被分号注释** - 注意:CLI 和 Web(如 Apache/Nginx)可能使用不同
php.ini,用php --ini确认 CLI 加载的是哪个文件
Windows 下启用 OpenSSL 的关键步骤
PHP 官方 Windows 版本默认带 OpenSSL,但常因路径或依赖缺失失效:
- 确保
php.ini中已取消注释:extension=php_openssl.dll - 确认
php_openssl.dll文件真实存在于ext/目录下(如C:\php\ext\php_openssl.dll) - 将 PHP 安装目录(如
C:\php)和C:\php\ext加入系统PATH(重启终端生效) - 下载并放置
libcrypto-1_1-x64.dll和libssl-1_1-x64.dll到 PHP 根目录(常见于 PHP 8.1+,从官方 ZIP 包中提取,不能用旧版 DLL 替换)
Linux/macOS 启用 OpenSSL 的常见陷阱
多数发行版 PHP 包默认启用 OpenSSL,但编译安装或容器环境容易漏掉依赖:
立即学习“PHP免费学习笔记(深入)”;
- Debian/Ubuntu:运行
sudo apt install php-cli php-openssl(注意不是php7.4-openssl这类旧包名) - CentOS/RHEL:运行
sudo yum install php-opcache php-common(php-common包含 OpenSSL 依赖) - Docker 用户:Alpine 镜像需额外安装
apk add openssl,且 PHP 镜像必须是php:alpine(非php:alpine-cli等精简版) - 源码编译 PHP 时,必须加
--with-openssl参数,否则即使系统有 OpenSSL 库也无效
验证 Composer 是否真正可用
改完配置后,别只跑 composer --version,它不触发 HTTPS 请求:
- 执行
composer diagnose—— 会检测 OpenSSL、网络连通性、CA 证书等 - 执行
composer create-project laravel/laravel test(或任意远程包)—— 实际走 HTTPS 下载流程 - 若仍报错
cURL error 60: SSL certificate problem,说明 CA 证书路径不对,需在php.ini设置curl.cainfo = "/path/to/cacert.pem"(可从 https://curl.se/ca/cacert.pem 下载)
最常被忽略的点:CLI 和 Web 用的不是同一个 php.ini;DLL 依赖缺失比配置注释更隐蔽;Docker Alpine 镜像里 php-opcache 包实际隐含 OpenSSL 支持,但没装它就真没 OpenSSL。











