composer提示“不安全的下载”本质是http仓库或ssl证书验证失败;secure-http=true时,项目级配置或http://仓库url会直接触发报错,需删composer.json中secure-http字段并确保所有repositories为https://,同时用composer config --global ssl.cafile指定有效pem证书。

Composer 提示“不安全的下载”,本质是它检测到某个仓库用了 http:// 协议,或系统证书验证失败——不是没走 HTTPS,而是 HTTPS 走了但被拦下了。
为什么 secure-http 设为 true 还报错?
因为 secure-http 是开关,但它的生效优先级被项目级配置完全覆盖。哪怕全局设了 true,只要 composer.json 里写了 "secure-http": false 或带 http:// 的仓库,就会立刻触发报错。
- 查真实值:运行
composer config secure-http(不加-g),看输出是不是false;再跑composer config -g secure-http对比 - 如果项目级返回
false,直接删掉composer.json中config块里的secure-http字段——别改它,删它最稳 -
repositories里任何一条"url": "http://xxx"都会直接中断解析,连composer install都不会开始
cURL error 60 或 SSL handshake failed 怎么办?
这不是协议问题,是 OpenSSL 拒绝信任服务端证书。常见于内网 Git、私有 Packagist 或企业代理环境。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
ssl.cafile必须用--global设置:composer config --global ssl.cafile /path/to/company-ca.pem;项目级配置无效 - 证书文件必须是 PEM 格式、无 BOM、无空行、无注释;用
openssl x509 -in ca.pem -text -noout能成功解析才算合格 - 确认 PHP 进程有读取权限(比如容器中运行的是
www-data用户,却把证书放在/home/user/下) - 别碰
secure-http false——它跟 SSL 握手失败完全无关,关了只会让问题更隐蔽
国内镜像源怎么配才真安全?
只换 https://mirrors.aliyun.com/composer/ 不等于安全。镜像若未同步官方 signature 字段,Composer 会自动跳过包完整性校验。
- 正确做法是保留官方源 + 启用签名验证:
composer config --global security.signature true - 再设可信镜像仅代理元数据:
composer config --global repos.packagist.type composer,然后composer config --global repos.packagist.url https://mirrors.aliyun.com/composer/ - 禁用旧镜像:
composer config --global --unset repos.packagist清掉可能残留的http://或停更源 - 验证是否生效:
composer diagnose输出里要有secure-http: OK和signature verification: OK
真正容易被忽略的是:私有仓库 URL 必须自己写成 https:// 开头,secure-http 不会帮你补协议;而 ssl.cafile 配错路径或格式时,Composer 会静默 fallback 到系统默认 CA,然后继续报错——你根本看不到加载失败提示。










