如何解决Composer提示SSL连接重置问题?

2026-04-30 15:231阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计881个文字,预计阅读时间需要4分钟。

如何解决Composer提示SSL连接重置问题?

这不是网络不通,也不是墙的问题,而是+TLS握手被中间设备(如企业代理、旧版OpenSSL或防火墙)强行中断。直接开启HTTPS或更换协议只是绕开症状,并非修复。

curl error 35 是什么信号

cURL error 35 出现在 composer diagnosecomposer install 过程中,说明 OpenSSL 协议协商失败——客户端和 packagist.org 在 TLS 握手阶段就断开了,连证书校验那步都没走到。

  • 常见于 RHEL/CentOS 7(OpenSSL 1.0.2k)、Windows 上 XAMPP/MAMP 自带的老旧 PHP、或企业内网代理重签证书的环境
  • 不是证书过期(那是 cURL error 60),所以改 curl.cainfo 不会起作用
  • 运行 openssl version,若低于 OpenSSL 1.1.1,基本可以确定是版本不支持 TLS 1.3 导致握手失败
  • 临时验证:加环境变量 CURL_IPRESOLVE=4 composer install(强制 IPv4)能跑通,说明是 IPv6 路由或中间设备干扰问题

为什么 config -g secure-http false 不解决问题

composer config -g secure-http false 后,Composer 会把所有源降级为 HTTP,但 packagist.org 已强制重定向到 HTTPS,最终仍会触发 TLS 握手——错误照旧,只是报错位置可能变成 301 或 connection reset。

  • 这个配置只影响 Composer 自己解析 repositories 的行为,不改变底层 cURL 的 TLS 协商逻辑
  • 它还会让私有源也走明文,存在依赖劫持风险,生产环境绝对不能留
  • 真正该动的是 OpenSSL 层:升级系统 OpenSSL,或让 PHP 使用新版 OpenSSL 编译(如 Homebrew 安装的 php@8.3)

更换下载协议的实际操作边界

所谓“更换协议”,只有两个安全、可控的入口点:指定 CA 路径(针对 cURL error 60)或切换镜像源(针对连接稳定性),而不是关 TLS。

  • 阿里云镜像 https://mirrors.aliyun.com/composer/ 用的是标准 TLS 1.2+,且 CDN 节点更靠近国内用户,握手成功率远高于直连 packagist.org
  • 执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 后,记得清缓存:composer clear-cache
  • 如果公司有私有仓库,必须单独配 cafilecomposer config -g repos.my-company {"url": "https://repo.example.com", "type": "composer", "options": {"ssl": {"cafile": "/path/to/internal-ca.pem"}}}
  • 不要用 http:// 镜像源——目前主流镜像都不提供 HTTP 接口,强行配会 403 或跳转失败

最容易被忽略的点:PHP 实例不统一

你敲 composer installphp composer.phar install 可能走的是完全不同的 PHP 环境,导致一个成功一个失败。

  • 查清楚当前命令背后是哪个 PHP:which phpphp -i | grep 'Loaded Configuration File'
  • CLI 和 Web 服务器(如 Apache/Nginx)的 php.ini 常常不同,openssl.cafilecurl.cainfo 必须在两者中都正确设置
  • Windows 下尤其注意路径分隔符:php.ini 里必须写 C:/php/extras/ssl/cacert.pemC:\php\extras\ssl\cacert.pem,单反斜杠会失效
标签:ComposerSSL

本文共计881个文字,预计阅读时间需要4分钟。

如何解决Composer提示SSL连接重置问题?

这不是网络不通,也不是墙的问题,而是+TLS握手被中间设备(如企业代理、旧版OpenSSL或防火墙)强行中断。直接开启HTTPS或更换协议只是绕开症状,并非修复。

curl error 35 是什么信号

cURL error 35 出现在 composer diagnosecomposer install 过程中,说明 OpenSSL 协议协商失败——客户端和 packagist.org 在 TLS 握手阶段就断开了,连证书校验那步都没走到。

  • 常见于 RHEL/CentOS 7(OpenSSL 1.0.2k)、Windows 上 XAMPP/MAMP 自带的老旧 PHP、或企业内网代理重签证书的环境
  • 不是证书过期(那是 cURL error 60),所以改 curl.cainfo 不会起作用
  • 运行 openssl version,若低于 OpenSSL 1.1.1,基本可以确定是版本不支持 TLS 1.3 导致握手失败
  • 临时验证:加环境变量 CURL_IPRESOLVE=4 composer install(强制 IPv4)能跑通,说明是 IPv6 路由或中间设备干扰问题

为什么 config -g secure-http false 不解决问题

composer config -g secure-http false 后,Composer 会把所有源降级为 HTTP,但 packagist.org 已强制重定向到 HTTPS,最终仍会触发 TLS 握手——错误照旧,只是报错位置可能变成 301 或 connection reset。

  • 这个配置只影响 Composer 自己解析 repositories 的行为,不改变底层 cURL 的 TLS 协商逻辑
  • 它还会让私有源也走明文,存在依赖劫持风险,生产环境绝对不能留
  • 真正该动的是 OpenSSL 层:升级系统 OpenSSL,或让 PHP 使用新版 OpenSSL 编译(如 Homebrew 安装的 php@8.3)

更换下载协议的实际操作边界

所谓“更换协议”,只有两个安全、可控的入口点:指定 CA 路径(针对 cURL error 60)或切换镜像源(针对连接稳定性),而不是关 TLS。

  • 阿里云镜像 https://mirrors.aliyun.com/composer/ 用的是标准 TLS 1.2+,且 CDN 节点更靠近国内用户,握手成功率远高于直连 packagist.org
  • 执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 后,记得清缓存:composer clear-cache
  • 如果公司有私有仓库,必须单独配 cafilecomposer config -g repos.my-company {"url": "https://repo.example.com", "type": "composer", "options": {"ssl": {"cafile": "/path/to/internal-ca.pem"}}}
  • 不要用 http:// 镜像源——目前主流镜像都不提供 HTTP 接口,强行配会 403 或跳转失败

最容易被忽略的点:PHP 实例不统一

你敲 composer installphp composer.phar install 可能走的是完全不同的 PHP 环境,导致一个成功一个失败。

  • 查清楚当前命令背后是哪个 PHP:which phpphp -i | grep 'Loaded Configuration File'
  • CLI 和 Web 服务器(如 Apache/Nginx)的 php.ini 常常不同,openssl.cafilecurl.cainfo 必须在两者中都正确设置
  • Windows 下尤其注意路径分隔符:php.ini 里必须写 C:/php/extras/ssl/cacert.pemC:\php\extras\ssl\cacert.pem,单反斜杠会失效
标签:ComposerSSL