根本原因是系统ca证书过期或缺失导致openssl信任链失效;需更新系统ca-certificates包(如sudo apt install --reinstall ca-certificates)或手动配置php.ini中curl.cainfo与openssl.cafile指向有效cacert.pem并重启php。

这是 Composer 在校验 HTTPS 连接或 PHAR 签名时,本地 OpenSSL 信任库中 CA 证书过期或缺失导致的报错,不是 Composer 本身的问题,而是系统级 TLS 信任链失效。
composer self-update 或 install 报 “SSL certificate problem: certificate has expired”
典型错误信息包含:SSL certificate problem: certificate has expired、cURL error 60: SSL certificate problem 或 file_get_contents(): SSL operation failed。这说明 Composer 尝试连接 https://packagist.org 或 https://getcomposer.org 时,系统无法验证服务器证书的有效性。
- 根本原因通常是操作系统自带的 CA 证书包(如
ca-certificates)长期未更新,尤其在 Debian/Ubuntu/CentOS 等 Linux 发行版或老旧 macOS 上常见 - Windows 用户若使用 Git Bash 或旧版 PHP 自带的 OpenSSL,也可能因内置证书过期触发该错误
- 不是 Composer 配置问题,
composer config -g repo.packagist.org或镜像设置无法绕过此层校验
如何快速验证并更新系统 CA 证书
先确认是否真为证书问题:运行 curl -I https://packagist.org 或 php -r "print_r(openssl_get_cert_locations());",看 default_cert_file 指向的路径是否存在且可读。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Debian/Ubuntu:
sudo apt update && sudo apt install --reinstall ca-certificates,然后sudo update-ca-certificates - CentOS/RHEL 7+:
sudo yum update ca-certificates或sudo dnf update ca-certificates - macOS(Homebrew):
brew reinstall ca-certificates,再运行brew link --force ca-certificates - macOS(原生):下载最新 cacert.pem,替换
/etc/ssl/cert.pem(需sudo) - Windows + PHP:从 curl.se 下载
cacert.pem,在php.ini中设置curl.cainfo = "C:\path\to\cacert.pem"和openssl.cafile = "C:\path\to\cacert.pem"
临时绕过(仅限调试,禁止用于 CI 或生产)
绕过证书校验等于关闭 HTTPS 安全防护,会暴露凭证和包内容,仅在离线调试或内网测试环境短时使用。
- 禁用全局 SSL 校验(危险):
composer config -g secure-http false—— 不推荐,影响所有项目 - 仅对当前命令跳过(稍安全):
composer self-update --no-sigcheck --no-cache,但--no-sigcheck仅跳过 PHAR 签名校验,不解决 cURL 层证书错误 - 真正生效的临时方案是让 PHP 使用新证书:
export SSL_CERT_FILE=/path/to/cacert.pem(Linux/macOS)或set SSL_CERT_FILE=C:\path\to\cacert.pem(Windows CMD)
为什么 composer self-update --verify-signature 也会失败
composer self-update --verify-signature 失败,往往不是签名本身有问题,而是它在下载新 composer.phar 前,先要通过 HTTPS 获取签名文件(.sig),这一步就卡在 CA 证书过期上。
- 所以必须先修复系统证书,再运行带
--verify-signature的命令 - 若你已手动下载了新版
composer.phar和对应.sig文件,可用composer self-update --signature-file composer.phar.sig composer.phar离线验证 - 注意:Composer 2.5+ 默认启用签名验证,关掉它(
--no-sigcheck)会让工具失去防篡改能力,别留着不管
CA 证书问题看似只是“连不上”,但它会阻断 self-update、install、audit 所有依赖远程源的操作;最稳妥的做法永远是更新系统证书,而不是调低安全水位。一旦修复,记得删掉所有临时 secure-http false 或 SSL_CERT_FILE 设置,避免遗忘后引入长期风险。










