根本原因是composer默认启用ssl证书校验,而内网代理注入的自签名证书导致校验失败;应优先更换为使用正规ca证书的可信镜像源(如https://packagist.phpcomposer.com),而非禁用校验。

Composer为什么连不上中文镜像
根本原因不是镜像本身,而是 Composer 默认启用 verify-peer(SSL 证书校验),而某些企业内网或本地代理环境会注入自签名证书,导致 Composer 认为镜像站点(如 https://packagist.phpcomposer.com)的证书不可信,直接报错:SSL certificate problem: unable to get local issuer certificate 或 cURL error 60。
不关证书校验,只换镜像源的正确做法
禁用 verify-peer 是危险操作(可能被中间人攻击),应优先保留校验,仅替换为可信镜像。国内主流镜像已全部使用正规 CA 签发证书,只需正确配置镜像地址即可:
- 全局设置(推荐):
composer config -g repo.packagist composer https://packagist.phpcomposer.com - 项目级设置:
composer config repo.packagist composer https://packagist.phpcomposer.com - 确认生效:
composer config -g repo.packagist应输出{"type": "composer", "url": "https://packagist.phpcomposer.com"}
注意:旧版镜像如 https://packagist.laravel-china.org 已停用;新版推荐用 https://packagist.phpcomposer.com 或清华源 https://mirrors.tuna.tsinghua.edu.cn/composer/ ——二者均支持 HTTPS + 正规证书,无需额外关校验。
实在要绕过证书校验时的最小化补救
仅限开发机临时调试,且确认网络路径中无恶意代理。必须明确指定作用域,避免污染全局:
- 仅对当前项目关闭:
composer config ssl.verifypeer false - 若需同时指定 CA bundle(比如你有内部根证书):
composer config ssl.cafile /path/to/your/cacert.pem - 绝对不要执行
composer config -g ssl.verifypeer false——这会让所有项目失去 HTTPS 安全保障
执行后可通过 composer config -l | grep ssl 检查是否仅当前项目生效。
验证镜像是否真正生效且安全
配置完别急着跑 install,先做两件事:
- 用
curl -I https://packagist.phpcomposer.com/packages.json看返回状态码是否为200,且无证书警告 - 运行
composer diagnose,重点看HTTP proxy support和HTTPS support是否 OK,以及Repo.packagist行显示的 URL 是否为你设的镜像地址 - 如果
diagnose提示curl error 60仍存在,说明镜像 URL 写错、拼写漏了s(https)、或系统级 curl 配置(如CURL_CA_BUNDLE环境变量)强行覆盖了 Composer 的证书行为
最常被忽略的是 Windows 上 Git Bash 自带的 curl 会读取 /usr/ssl/certs/ca-bundle.crt,而该文件可能过期或不含新镜像所用的 CA;此时应手动指定 ssl.cafile 路径,而不是关校验。











