答案:必须运行php -r "print_r(openssl_get_cert_locations());"确认php实际加载的default_cert_file和ini_cafile路径,检查其是否存在、非空、权限合规(非777)、内容为有效pem格式且未过期,常见问题包括路径指向停更证书、文件为空或权限错误。

确认PHP实际加载的CA证书路径
Composer报cURL error 60: SSL certificate problem: self signed certificate或unable to get local issuer certificate,不是Composer自己管证书,而是PHP底层的OpenSSL/cURL在验证时失败。第一步必须查清它到底读哪个文件:php -r "print_r(openssl_get_cert_locations());",重点关注default_cert_file和ini_cafile的值。
常见陷阱:
- 路径存在但文件为空(比如
/etc/ssl/certs/ca-certificates.crt是空文件) - 权限为
777(PHP拒绝加载世界可写的证书文件) - 指向一个已过期的bundle(如Homebrew PHP自带的
curl-ca-bundle.crt停更于2021年) - Windows下
php.ini里curl.cainfo和openssl.cafile没设成同一路径,导致cURL和stream用两套证书
追加自签名根证书到系统CA bundle(推荐)
这是最稳定的做法,影响所有PHP HTTPS请求(包括file_get_contents、cURL、Composer),不是只修Composer。
前提:你有PEM格式的根CA证书(以-----BEGIN CERTIFICATE-----开头,不是.pfx或.der)。
- Linux(Debian/Ubuntu):
sudo cp your-company.crt /usr/local/share/ca-certificates/→sudo update-ca-certificates - CentOS/RHEL:
sudo cat your-company.crt >> /etc/pki/tls/certs/ca-bundle.crt(或用trust extract-compat刷新) - macOS:双击证书 → “钥匙串访问” → “系统”钥匙串 → 右键 → “显示简介” → “信任” → 设为“始终信任”
- Windows:双击 → “安装证书” → “本地计算机” → 存储位置选“受信任的根证书颁发机构”
为Composer单独指定cafile(容器/CI场景)
当无法改系统证书库(如Docker Alpine镜像、GitHub Actions runner),就让Composer显式用你提供的证书。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
把PEM格式证书(含完整链:叶证书→中间→根CA)放到固定路径,例如/certs/company-root.crt,然后执行:
composer config -g cafile /certs/company-root.crt- 注意:这个配置只对
composer命令生效,不影响PHP其他组件 - 如果用
vendor/bin/composer,它默认忽略全局配置,得加--no-plugins或改用php composer.phar - 若证书链不全(只放了根CA,没放中间证书),仍会报错
别碰--no-secure-http或secure-http false
这两个开关控制的是是否允许HTTP协议仓库,**不关闭证书校验**。很多用户试了发现没用,就是因为混淆了概念。
真正绕过证书校验要动PHP层:
- 临时调试可用:
COMPOSER_NO_SSL=1 composer install(仅限内网环境) - 或改
php.ini:设openssl.cafile=/dev/null(极不推荐) - 但这些只是掩盖问题——证书链缺失、系统时间偏差、中间人代理才是真因
最常被忽略的点:系统时间不准会导致证书“尚未生效”或“已过期”,哪怕证书本身没问题。先date确认时间同步再折腾证书。










