Composer无内置HTTPS调试开关,-vvv可查看HTTP请求头与证书错误,深层TLS细节需tcpdump/Wireshark抓包或PHP层启用cURL VERBOSE模式。

Composer 的 HTTPS 请求日志没有内置“调试模式”开关
Composer 本身不提供类似 --debug-https 这样的专用参数来开启 HTTPS 协议层日志。它底层用 PHP 的 stream_context 或 cURL 发起请求,但默认不暴露 TLS 握手、证书验证、SNI 等细节。所谓“HTTPS 调试日志”,实际要分两层看:一是 Composer 自身的网络操作日志(可开),二是底层 HTTPS/TLS 的交互细节(需外部工具或 PHP 配置介入)。
用 -vvv 查看 Composer 的 HTTP 请求与响应头
这是最直接有效的做法,能确认是否走 HTTPS、证书是否被拒绝、重定向是否异常等关键信息:
-
composer install -vvv会输出完整请求 URL、HTTP 状态码、响应头(含Content-Type、X-Status等) - 若遇到证书错误,会明确报出类似
SSL certificate problem: unable to get local issuer certificate或cURL error 60 - 注意:该日志不显示 TLS 版本、密钥交换过程、证书链内容等协议层细节
- 配合
COMPOSER_DISABLE_TLS=0可强制启用 TLS(默认已启用),但不会增加日志深度
抓包看真实 HTTPS 流量:推荐 tcpdump + Wireshark 或 mitmproxy
当需要确认证书是否被正确发送、SNI 是否匹配、服务端是否返回了预期的 ALPN 协议时,必须绕过 Composer 日志,直接观察网络包:
- 运行
tcpdump -i any -w composer.pcap port 443 and host repo.packagist.org,再执行composer update -n - 用 Wireshark 打开
composer.pcap,过滤ssl.handshake,查看 Client Hello 中的 SNI、ALPN、支持的密码套件 - 若需解密 HTTPS(仅限测试环境),可在 PHP 中设置
openssl.cafile指向可信 CA,并用 mitmproxy 拦截 + 导入根证书,但生产环境严禁使用 - 注意:PHP 的 cURL 若编译时未启用
SSLKEYLOGFILE支持(如 Alpine 的curl包常缺失),则无法用 NSS Key Log 方式解密 TLS 1.2/1.3 流量
PHP 层面强制输出 cURL 详细信息(仅限开发机)
修改 Composer 源码或临时 patch src/Composer/Util/RemoteFilesystem.php 中的 cURL 初始化逻辑,在 curl_setopt($ch, CURLOPT_VERBOSE, true) 后加 curl_setopt($ch, CURLOPT_STDERR, fopen('php://stdout', 'w')),就能看到包括 TLS 握手在内的原始 cURL 调试输出:
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, fopen('php://stdout', 'w'));
但这要求你有可写权限且能重启 Composer 进程,不适合 CI 或容器环境;另外,部分 PHP 安装(尤其 Windows)可能因 STDERR 重定向失效而无输出。
真正卡住的问题往往不是“怎么开日志”,而是日志里看不到证书链加载路径、CA bundle 实际位置、或系统 OpenSSL 与 PHP cURL 使用的证书库不一致——这些得查 php --ri curl 和 openssl version -d 输出,再比对 curl_getinfo($ch, CURLINFO_SSL_VERIFYRESULT) 返回值。


















