composer diagnose可检测HTTPS可用性、SSL证书可信度及远程仓库连通性,复现真实依赖安装场景,比curl -I更准确;它检查openssl/curl扩展、访问packagist.org并校验证书链、识别代理与CA路径配置。

Composer 本身不提供“安全连接状态”的实时检测面板,但你可以用 composer diagnose 快速验证 HTTPS、SSL 证书、远程仓库连通性这三项关键状态——它比手动 curl 更贴近 Composer 实际行为。
composer diagnose 能查哪些连接相关问题
该命令会主动测试 Composer 在安装依赖时真正依赖的底层能力:
- 检查 PHP 是否启用了
openssl和curl扩展(没启用就根本走不了 HTTPS) - 尝试访问
https://packagist.org/packages.json,并校验 SSL 证书链是否可信(失败时会明确提示 “SSL certificate problem” 或 “unable to verify the first certificate”) - 确认 HTTPS 协议可用、无代理干扰(比如代理配错导致卡在 CONNECT 阶段)
- 检测 CA 证书路径是否被正确识别(若 PHP 编译时未指定
--with-curl或--with-openssl,这里会报错)
为什么 diagnose 比 curl -I https://packagist.org 更准
curl -I 只反映系统级 HTTPS 能力,而 composer diagnose 是用 Composer 自己的 HTTP 客户端发起请求,复现真实场景:
- 它会读取你配置的
http-proxy和https-proxy,如果只配了前者,diagnose就会卡住或超时,而curl可能走直连成功 - 它会加载
~/.composer/auth.json和全局 config,比如镜像源、token 等,这些都可能影响 TLS 握手(例如某些私有源强制双向证书认证) - 它会检查 PHP 的
stream_context_create()是否能正常设置verify_peer和cafile,这是 Composer 底层真正校验证书的地方
看到 “SSL certificate problem” 怎么快速定位
当 composer diagnose 报出证书错误,不要直接关 SSL 验证。先分三步排查:
- 运行
php -r "print_r(openssl_get_cert_locations());",确认default_cert_file路径存在且可读;常见问题:Ubuntu 上是/usr/lib/ssl/certs/ca-certificates.crt,但 PHP 编译时可能硬编码了旧路径 - 执行
curl -vI https://packagist.org,看* SSL certificate verify ok.是否出现;如果 curl 成功但 diagnose 失败,说明是 PHP 的 OpenSSL 环境和系统不一致 - 检查是否误配了镜像源:运行
composer config -g repo.packagist,输出必须是完整 JSON,且url字段以https://开头、末尾带/;腾讯云镜像写成https://mirrors.cloud.tencent.com/composer(缺斜杠)会导致 404,诊断时也表现为连接失败
真正难处理的不是报错本身,而是 diagnose 成功通过却仍装不了包——那往往是因为它只测了 packagist.org,而你项目里 repositories 声明了多个源,其中某个私有源的证书不可信,但 diagnose 不会挨个去试。


















