Composer 2.2+ 默认强制 HTTPS,需确保镜像 URL 为 https://、ssl.cafile 配置有效且 signature-verification 同时启用,三者缺一不可。

是的,Composer 2.2+ 默认强制走 HTTPS 协议,但前提是没被手动关掉或配错镜像源。 它不是“可选”,而是启动时就启用 secure-http,所有元数据请求(比如 packages.json)都必须用 HTTPS;一旦发现 HTTP 镜像,直接报错拒绝加载。
composer install 报 “The repository has a HTTP URL, but secure-http is enabled” 怎么办
这是最典型的误配现象:你在全局或项目里写了类似 composer config -g repo.packagist https://mirrors.example.com 这种配置,但镜像地址用了 http:// 开头(比如 http://packagist.phpcomposer.com),而 Composer 拒绝降级。
- 检查当前镜像:运行
composer config -g repo.packagist或composer config -g repos.packagist.url,确认输出是https://开头 - 修复方式不是关
secure-http,而是换为合法 HTTPS 镜像,例如阿里云:composer config -g repos.packagist.url https://mirrors.aliyun.com/composer/ - 如果镜像服务本身只提供 HTTP(如内网老旧 Satis),必须在服务端补上 TLS,客户端不能妥协
composer diagnose 显示 “cURL error 60: SSL certificate problem” 是网络不通吗
不是。这个错误是 OpenSSL 在 TLS 握手阶段就拒绝了证书——说明证书链不完整、CA 不可信,或 ssl.cafile 配置失效。它和 DNS、防火墙、代理通不通无关。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
composer diagnose会真实发起 HTTPS 请求,校验 SNI、OCSP Stapling、证书链和系统信任状态 - 常见原因:私有仓库用了自签名证书,但
ssl.cafile指向的 PEM 文件格式不对(含 BOM、空行、DER 内容)、路径不可读、或没合并中间 CA - 验证是否生效:
composer config --global ssl.cafile必须输出正确路径;再看composer diagnose输出中 “CA file” 行是否标 OK - Composer ≥2.5 版本更严格:若 PEM 解析失败,会静默忽略
ssl.cafile,不报错也不提示
只换镜像源就能保证 HTTPS 安全吗
不能。单纯把官方源替换成镜像(repo.packagist),会导致 Packagist 签名字段丢失,Composer 自动关闭 signature-verification,退化为仅校验 composer.lock 哈希——这层保护可被篡改。
- 真正安全的配置是保留官方源语义,仅代理元数据:
composer config -g repos.packagist.type composer+composer config -g repos.packagist.url https://mirrors.aliyun.com/composer/ - 必须同时开启两个开关:
composer config -g secure-http true和composer config -g security.signature-verification true - 运行
composer diagnose,确认输出中同时出现secure-http: OK和signature verification: OK - 别信“关掉
secure-http就能过 CI”,那等于主动打开中间人攻击入口,漏洞扫描工具(如composer audit)也会静默跳过关键检查
HTTPS 安全不是开关一开就完事。最关键的三个点常被忽略:镜像 URL 必须是 https://,ssl.cafile 必须是 OpenSSL 可解析的纯 PEM 链文件且 PHP 进程有读权限,签名验证必须和 secure-http 同时启用——缺一不可。

















