答案是配置正确的 openssl.cafile 路径。运行 php -i | grep "openssl.cafile" 确认为空后,下载 cacert.pem 并在 php.ini 中设置 openssl.cafile=/path/to/cacert.pem,重启环境后用 php -r "print_r(openssl_get_cert_locations());" 验证 default_cert_file 是否更新。

Composer install 报错 “cURL error 60: SSL certificate problem” 怎么办
这是典型的 open_ssl.cafile 未配置导致的 HTTPS 请求失败,Composer 在连接 packagist.org 或私有仓库时无法验证证书链。根本原因不是证书过期或网络问题,而是 PHP 的 OpenSSL 扩展找不到可信 CA 证书路径。
确认是否真由 cafile 缺失引起
运行 php -i | grep "openssl.cafile",如果输出为空或显示 no value,就坐实了问题。再补一个验证:执行 composer diagnose,它会明确提示 openssl.cafile is not set 或类似警告。
- Windows 用户常见于用 XAMPP/MAMP 安装的 PHP,自带 openssl 配置被忽略
- macOS 上通过 Homebrew 安装的 PHP,
cafile默认不写入php.ini - Docker 环境里基础镜像(如
php:alpine)通常压根没预装 CA 证书包
设置 open_ssl.cafile 的三种可靠方式
优先级从高到低:命令行参数 > php.ini 全局配置 > Composer 自定义配置。推荐直接改 php.ini,一劳永逸。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 找对
php.ini文件:php --ini查看 Loaded Configuration File 路径 - 下载 CA 包(推荐 Mozilla 维护的
cacert.pem):curl -sS https://curl.se/ca/cacert.pem -o /usr/local/etc/php/certs/cacert.pem(macOS/Homebrew)或C:\php\extras\ssl\cacert.pem(Windows) - 在
php.ini中添加或修改这一行:openssl.cafile=/path/to/cacert.pem(注意路径必须是绝对路径,且文件可读) - 重启 Web 服务或 CLI 环境,再运行
php -r "print_r(openssl_get_cert_locations());"确认default_cert_file已更新
临时绕过(仅限开发/调试,切勿上生产)
如果只是想快速验证项目能否装起来,可用 -d 参数覆盖配置,但每次都要加:
php -d openssl.cafile=/path/to/cacert.pem composer install
或者更危险的方案——禁用 SSL 验证(强烈不建议):
composer config -g secure-http false
- 这会让 Composer 对所有仓库跳过 HTTPS 证书校验,存在中间人攻击风险
-
secure-http false只影响仓库协议检查,不解决 cURL 60 错误本身;真正报错时仍需cafile - 某些私有仓库强制 HTTPS,关掉
secure-http会导致 400 错误,得不偿失
CA 证书路径一旦配错(比如权限不足、路径拼写错误、文件不存在),PHP 不会报错,但 openssl_get_cert_locations() 返回的 default_cert_file 会为空——这个静默失败最容易被忽略。

















