Ubuntu 22.04 LTS下Composer报curl error 60 SSL证书问题如何解决
Composer curl error 60 排查修复方案
- 校验PHP证书相关配置正确性
系统证书库正常不代表PHP扩展能正确读取证书,先执行以下命令查看PHP实际加载的证书配置:
如果php -r "var_dump(openssl_get_cert_locations());" php -r "echo 'curl.cainfo: '.ini_get('curl.cainfo').PHP_EOL; echo 'openssl.cafile: '.ini_get('openssl.cafile').PHP_EOL;"curl.cainfo、openssl.cafile配置项为空,或指向不存在的文件,先执行php --ini | grep "Loaded Configuration"获取PHP CLI模式加载的php.ini路径(Ubuntu 22.04下PHP8.1默认路径为/etc/php/8.1/cli/php.ini),编辑该文件找到两个配置项,修改为系统默认证书路径:
保存后执行curl.cainfo = /etc/ssl/certs/ca-certificates.crt openssl.cafile = /etc/ssl/certs/ca-certificates.crtphp -i | grep -E "(curl.cainfo|openssl.cafile)"确认配置已生效。 - 修正证书软链接,更新根证书库
你之前创建软链接时源和目标顺序写反,会导致链接指向不存在的文件,执行以下命令修正软链接并强制更新证书库:
如果系统内置证书版本过旧,可手动获取最新的Mozilla CA根证书集合,覆盖写入sudo apt install --reinstall ca-certificates sudo mkdir -p /etc/pki/tls/certs sudo ln -sf /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt sudo update-ca-certificates -f/etc/ssl/certs/ca-certificates.crt后再执行上述更新命令。 - 排查网络中间人劫持/代理证书问题
如果你处于企业内网、开启了系统代理或抓包工具,网络中间设备会替换SSL证书导致校验失败,先执行以下命令测试直连Packagist的证书状态:
如果输出中显示证书签发方为企业网关、代理工具、防火墙的自定义证书,需要将对应根证书的crt文件放入curl -v https://repo.packagist.org/packages.json/usr/local/share/ca-certificates/目录,再执行sudo update-ca-certificates导入证书即可。 - 清除Composer自定义证书配置与缓存
检查Composer全局配置中是否存在错误的独立证书路径配置,执行:
如果输出了非空的cafile路径,执行以下命令删除该配置,让Composer默认使用PHP与系统的证书配置:composer config -g --list | grep cafilecomposer config -g --unset cafile composer clear-cache - 验证修复结果
所有操作完成后执行composer diagnose -vvv,如果不再报SSL证书相关错误,即可正常执行install、update操作。
内容的提问来源于stack exchange,提问作者CharlesM
相关产品推荐
相关产品推荐

