这不是证书真过期,而是本地ca证书包陈旧或系统时间偏差大;需运行php -r "print_r(openssl_get_cert_locations());"查default_cert_file和ini_cafile路径,确认存在、可读且更新于2022年后,并校准系统时间。

直接结论:这不是证书真过期了,而是你本地的 CA 证书包陈旧或系统时间偏差太大——SSL certificate problem: certificate has expired 这类报错,90% 以上跟 Packagist 服务器无关。
先查 PHP 实际用的证书路径
别猜,运行这行命令看 PHP 到底读哪个文件:
php -r "print_r(openssl_get_cert_locations());"
重点关注输出里的 default_cert_file 和 ini_cafile。如果两者为空、指向不存在的路径,或者文件最后修改时间早于 2022 年(比如还含已吊销的 DST Root CA X3),就说明证书失效了。
- Windows 常见失效路径:
C:/php/extras/ssl/cacert.pem(XAMPP/WAMP 自带证书基本都停更了) - Linux/macOS 常见路径:
/etc/ssl/certs/ca-certificates.crt或/usr/local/etc/openssl/cert.pem - 路径必须是绝对路径,Windows 上用正斜杠或双反斜杠,别用单反斜杠(会转义)
更新 CA 证书文件本身
系统自带或旧版 PHP 附带的证书包大多停更于 2021 年,无法验证 ISRG Root X1 等新根证书。必须换官方维护的最新版:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 下载地址固定为:
https://curl.se/ca/cacert.pem - 用
curl -sS https://curl.se/ca/cacert.pem -o /path/to/cacert.pem保存为纯文本(UTF-8),别用浏览器“另存为”——容易存成 HTML - 验证是否落地成功:
php -r "var_dump(file_exists('/path/to/cacert.pem'));"返回bool(true)才算到位
同步配置 php.ini 里的两个关键项
PHP 的 OpenSSL 和 cURL 各走各的证书配置,漏一个都会失败:
-
openssl.cafile控制file_get_contents、stream_context_create等原生 HTTPS 调用 -
curl.cainfo控制 Composer 底层 cURL 请求 - 必须设为同一绝对路径,且路径用英文双引号包裹,例如:
openssl.cafile="/usr/local/etc/php/cacert.pem" - 改完后 CLI 模式要新开终端,Web 模式必须完整重启服务(
sudo systemctl restart php-fpm或sudo apachectl restart,reload 不生效)
别忘了校准系统时间
偏差超过 2 分钟就会让证书有效期校验失败——尤其在虚拟机、Docker 容器或 Windows 休眠唤醒后很常见:
- Linux/macOS:运行
timedatectl status | grep "System clock synchronized",输出yes才算准;否则执行sudo timedatectl set-ntp true && sudo systemctl restart systemd-timesyncd - Windows:管理员权限下运行
w32tm /resync,若失败先net start w32time,再指定可靠源:w32tm /config /syncfromflags:manual /manualpeerlist:"time.nist.gov pool.ntp.org" - 验证方式:对比
date和curl -s https://worldtimeapi.org/api/ip | jq '.datetime'(需装jq),误差 ≤ 1 秒才算稳
最常被忽略的是:证书路径和时间问题必须先解决,再切镜像源。否则哪怕换成华为云或阿里云镜像,照样报错——底层 HTTPS 链路不通,镜像只是个中转,不是万能解药。










