必须用curl -vi验证ssl证书链是否完整可信,否则composer install会因ssl校验失败卡住;仅返回200或diagnose通过不代表https可用,需确认php openssl扩展读取的ca证书路径有效且内容最新。

直接测 HTTPS 连通性不能只看 curl -I 返回 200,必须确认 OpenSSL 能完成整条链路验证——否则 composer install 仍会卡在 SSL certificate verify failed。
用 curl 模拟 Composer 的 HTTPS 请求行为
Composer 底层用 PHP cURL 访问 https://packagist.org/packages.json,但默认启用证书校验。你得用相同参数复现:
-
curl -vI https://packagist.org/packages.json:加-v看 TLS 握手细节,重点检查* SSL certificate verify ok.是否出现 - 若失败,常见原因是系统 CA 证书过旧(如 CentOS 7 的
/etc/pki/tls/cert.pem未更新),不是 Composer 配置问题 - 别用
curl -k测试——它跳过校验,结果和 Composer 实际行为不一致 - 如果
curl -vI成功但composer install失败,说明 PHP 的 OpenSSL 扩展没读到同一份证书文件,需查php --ri openssl输出里的OpenSSL default_cert_file
composer diagnose 不验证真实 HTTPS 连接
composer diagnose 会尝试连接 https://packagist.org,但它只判断“能否建立 TCP 连接 + 收到 HTTP 响应”,不校验证书链。所以:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 即使
diagnose显示 “HTTPS is available” 和 “Connection to packagist.org works”, 仍可能在install阶段报SSL3_GET_SERVER_CERTIFICATE - 它不检测证书是否被中间设备(如企业防火墙、Clash)劫持并替换为自签名证书
- 真正要验证证书有效性,必须用
curl -vI或直接运行php -r "print_r(openssl_get_cert_locations());"确认 PHP 加载的证书路径是否可读且内容有效
镜像源的 HTTPS 安全性容易被误判
很多中文镜像(如阿里云、腾讯云)用的是通配符证书或自建 CA,但它们的证书链未必被系统信任。测试时要注意:
- 别只测根路径
https://mirrors.aliyun.com/composer/,得测实际包接口:curl -vI https://mirrors.aliyun.com/composer/packages.json - 某些镜像返回 200 但 Content-Type 是
text/html(反爬跳转页),这时curl -I看不出问题,必须加-w "%{content_type}"验证 - 腾讯云镜像要求
User-Agent含Composer,否则返回 403;而 403 会被diagnose当作“连接成功”,掩盖真实问题 - 如果镜像用了 HTTP/2,但 PHP 的 cURL 版本太老(curl -vI 会显示
* Using HTTP/2,而老版 PHP 只支持 HTTP/1.1
最危险的盲区是:你以为连上了 HTTPS,其实流量早被中间设备解密重签,证书校验靠的是那个设备的私有 CA——而你的 PHP 没装它。这种情况下,curl -vI 和 composer install 都会失败,但错误信息可能指向“时间不同步”或“证书过期”,实际是证书链缺失。










