Composer 执行时提示 SSL read: error 是 OpenSSL 在 TLS 握手或响应读取阶段失败所致,主因是系统 CA 证书过期、OpenSSL 版本老旧、代理干扰;应优先更新 CA 证书包与 OpenSSL,其次排查代理设置,禁用 secure-http 仅限临时调试。

Composer 执行时提示 SSL read: error 怎么办
这是 Composer 在 HTTPS 请求过程中底层 OpenSSL 读取 TLS 握手或响应数据失败的典型报错,不是网络不通,而是 SSL/TLS 协商环节中断。常见于证书过期、系统 CA 证书库陈旧、代理干扰或 OpenSSL 版本缺陷。
检查并更新系统的 CA 证书包
Composer 依赖系统级 CA 证书(如 Linux 的 /etc/ssl/certs/ca-certificates.crt 或 macOS 的钥匙串),若证书库多年未更新,会无法验证 packagist.org 等域名的新签发证书。
- Ubuntu/Debian:
sudo apt update && sudo apt install --reinstall ca-certificates - CentOS/RHEL:
sudo yum reinstall ca-certificates或sudo dnf reinstall ca-certificates - macOS(Homebrew):
brew reinstall ca-certificates,再执行brew link --force ca-certificates - Windows(Git Bash / WSL):优先更新 WSL 系统证书;若用 Windows 原生 PHP,需手动更新 PHP 的
curl.cainfo指向最新证书 bundle(如从 curl.se 下载cacert.pem)
绕过证书校验(仅限临时调试,不推荐生产)
强制关闭 SSL 验证能跳过该错误,但会暴露中间人攻击风险,且 Composer 2.2+ 默认禁用此行为。仅在确认网络环境可信(如离线开发机、内网镜像)时短时使用:
composer config -g secure-http false composer clear-cache
注意:secure-http false 同时禁用所有 HTTPS 源的安全校验,包括包下载和元数据请求;恢复命令为 composer config -g secure-http true。
排查代理与 OpenSSL 版本问题
企业网络常用 HTTP 代理或 SSL 解密网关,可能破坏 TLS 流量完整性;老旧 OpenSSL(如 1.0.2 或更早)存在已知握手 Bug,尤其在 TLS 1.3 协商中易触发 SSL read: error。
- 检查是否走代理:
echo $HTTP_PROXY $HTTPS_PROXY,临时取消:unset HTTP_PROXY HTTPS_PROXY - 查看 OpenSSL 版本:
php -r "print_r(openssl_get_cipher_methods());"不报错但openssl version显示OpenSSL 1.0.2*?建议升级到 1.1.1 或 3.x - 验证是否真为 OpenSSL 问题:运行
php -r "var_dump(file_get_contents('https://repo.packagist.org/packages.json'));",若同样失败,说明是 PHP/cURL 层面的 SSL 问题,非 Composer 特有
证书更新和 OpenSSL 升级解决 90% 的 SSL read: error 场景,但很多人只记得清缓存或换源,却忽略系统证书本身已失效——这点最容易被跳过。










