应让 Composer 信任系统或 PHP 环境中的根证书,而非禁用 SSL 验证;需下载最新 CA 包(如 curl.se/cacert.pem),在 php.ini 中配置 openssl.cafile 为绝对路径并确保可读,重启环境后验证 openssl_get_cert_locations() 输出是否更新。

composer install 报 SSL certificate problem 错误怎么办
直接关掉 SSL 验证不是解法,是掩耳盗铃。真正要做的,是让 composer 信任你系统或 PHP 环境里该信任的根证书。
常见错误信息长这样:SSL certificate problem: unable to get local issuer certificate 或 cURL error 60。本质是 PHP 的 cURL 没法验证 HTTPS 响应的证书链,通常因为 CA 包缺失、过期,或 Composer 没读到正确路径。
- 先确认 PHP 是否自带 CA 包:运行
php -r "print_r(openssl_get_cert_locations());",看default_cert_file路径是否存在且可读 - 如果路径是空的、指向不存在的文件,或文件太老(比如来自 2018 年前的 OpenSSL),就得手动指定一个靠谱的 CA 包
- 别用系统自带的
/etc/ssl/certs/ca-certificates.crt—— 某些 Linux 发行版这个文件只是符号链接,PHP 有时读不了;优先用 Mozilla 官方维护的curl-ca-bundle.crt
怎么给 composer 设置 cafile(Windows / macOS / Linux 通用)
composer 本身不直接读 openssl.cafile,但它会继承 PHP 的配置。所以关键在 PHP 层,而不是改 Composer 配置文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 下载最新 CA 包:
curl -o /usr/local/etc/php/certs/cacert.pem https://curl.se/ca/cacert.pem(macOS/Linux)或放到C:\php\extras\ssl\cacert.pem(Windows) - 编辑
php.ini,加上这行:openssl.cafile=/usr/local/etc/php/certs/cacert.pem(路径必须绝对、真实存在、PHP 进程有读权限) - 重启 Web 服务或 CLI 环境(比如
brew services restart php或重开终端),再运行php -m | grep openssl确认模块加载正常 - 验证是否生效:执行
php -r "print_r(openssl_get_cert_locations());",检查default_cert_file是否已更新为你刚设的路径
为什么 vendor/bin/composer 和全局 composer 行为不一致
因为它们可能调用的是不同版本的 PHP,或者用了不同的 php.ini。尤其是用 Homebrew、XAMPP、MAMP、WampServer 时,CLI 和 Web 的 PHP 配置经常分家。
- 查清楚你当前用的是哪个 PHP:
which php和php -i | grep 'Loaded Configuration File' - 如果你用
php composer.phar install成功,但composer install失败,说明 shell alias 或 PATH 里的composer命令背后是另一个 PHP 实例 - 临时绕过方法(仅调试):
php -d openssl.cafile=/path/to/cacert.pem /usr/local/bin/composer install,但别长期这么用 - Composer 自带的
--cafile参数只在 2.5.0+ 支持,且仅对部分命令有效(如create-project),install和update不认它
国内用户额外要注意的中间件干扰
某些企业网络、校园网、或国产杀毒软件(如 360、腾讯电脑管家)会劫持 HTTPS 流量,用自己的根证书签发代理证书——而这个证书没被 PHP 信任,就会导致 composer 卡在 SSL 验证上。
- 临时判断是不是中间件问题:用
curl -v https://packagist.org/packages.json,看输出里* Server certificate下有没有异常的颁发者(比如 “Qihoo 360”、“Tencent”) - 如果确认是中间件,不要强行关 SSL 验证,而是把它的根证书导出为 PEM,追加进你的
cacert.pem文件末尾(注意格式:必须以-----BEGIN CERTIFICATE-----开头) - Mac 上有些代理工具(如 Surge、Clash)启用“TUN 模式”后也会干扰,建议 Composer 操作时临时关闭
证书路径写错、权限没放开、PHP 配置没重载——这三个点占了八成以上的真实故障。别急着搜“怎么跳过 SSL”,先跑一遍 openssl_get_cert_locations() 看清 PHP 真正在用哪个文件。

















