composer diagnose 会真实发起 HTTPS 请求测试 TLS 握手、证书链、SNI、OCSP Stapling 及系统信任状态,非仅连通性检测;若用中间人代理或自签名 CA,常报 curl: (60) SSL certificate problem,需全局配置 ssl.cafile 指向正确 PEM 证书链。

composer diagnose 会真实走 HTTPS 握手,不是 ping
它会向 packagist.org 发起完整 TLS 请求,校验证书链、SNI、OCSP Stapling 和系统信任状态。如果公司用了中间人代理或自签名 CA,composer diagnose 很可能直接报 curl: (60) SSL certificate problem: unable to get local issuer certificate。这不是连不通,而是 OpenSSL 在握手阶段就拒绝了证书——composer install -vvv 里看到的 “Downloading” 行不可信,它可能已悄悄降级到 HTTP 或跳过校验。
ssl.cafile 必须是 PEM 链文件,且得全局配置
composer config ssl.cafile 如果只在项目里跑,基本无效。Composer 的 HTTPS 连接发生在全局网络层,必须用 --global:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer config --global ssl.cafile /etc/ssl/certs/company-ca.pem- 确认生效:
composer config --global --list | grep ssl.cafile - 文件必须是纯 PEM 格式:以
-----BEGIN CERTIFICATE-----开头,不能有 BOM、空行或注释 - 若私有仓库用了中间 CA,需合并中间 CA + 根 CA(顺序:中间在前、根在后),用
cat intermediate.crt root.crt > combined.pem拼接,别手动复制粘贴 - PHP 进程得有读权限,尤其是 nginx/php-fpm 下用
www-data用户时,家目录路径常不可读
PHP 的 openssl.cafile 和 curl.cainfo 也得对上
Composer 不直接读这两个 ini 配置,但它的底层 cURL 依赖它们。如果 php -r "print_r(openssl_get_cert_locations());" 显示的 default_cert_file 是空或错的,ssl.cafile 可能被静默忽略(尤其 Composer ≥2.5):
- 下载最新 Mozilla bundle:
curl -o /usr/local/etc/php/ca-bundle.crt https://curl.se/ca/cacert.pem - 编辑
php.ini,确保两行都存在且路径一致:openssl.cafile=/usr/local/etc/php/ca-bundle.crtcurl.cainfo=/usr/local/etc/php/ca-bundle.crt - Windows 用户注意:PHP 自带的
phpextrassslcacert.pem常年不更新,建议替换
别信“关掉 secure-http 就行”,那是掩耳盗铃
composer config -g secure-http false 看似解决报错,实则打开两个口子:允许 HTTP 仓库 + 关闭所有 HTTPS 证书校验。漏洞扫描(如 composer audit)可能因此静默跳过,你根本不知道漏检了什么。更隐蔽的是,某些镜像源(比如 Artifactory 启用 Token Authentication 后)在证书校验失败时会提前断连,错误日志反而指向认证失败,把 SSL 问题彻底掩盖。

















