答案是系统时间偏差超2分钟导致https证书校验失败,需校准本地时钟:linux/macos用timedatectl启用systemd-timesyncd并重启服务,windows执行w32tm /resync /force并配置可靠ntp源,临时禁用ssl验证仅限调试且不安全。

不是证书真过期了,是本地系统时间偏差太大,导致 OpenSSL 校验 notBefore 和 notAfter 时直接判定失败——偏差超 2 分钟就大概率触发 SSL certificate problem: certificate has expired。
检查系统时间是否严重偏移
Composer 依赖系统时钟验证 HTTPS 证书有效期,一旦快/慢超过数分钟(常见快 5 分钟以上),就会拒绝连接。别信桌面右下角显示的“已同步”,它可能只是单次同步后就停摆了。
- Linux/macOS:运行
date,再执行curl -s https://worldtimeapi.org/api/ip | jq '.datetime'(需jq)比对;或访问 time.is 手动核对 - Windows:管理员打开 CMD,运行
w32tm /query /status,看Last Successful Sync Time是否在 5 分钟内;若为空或超时,说明已失联 - 偏差 > 2 分钟必须修复,否则所有 HTTPS 请求(包括
curl -I https://packagist.org)都会失败
Linux/macOS 快速校准系统时钟
别手动 date -s,容易出错且重启即失效。systemd-timesyncd 是轻量、可靠、默认启用的方案,但常被禁用或未启动。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先启用并启动服务:
sudo timedatectl set-ntp true,然后sudo systemctl restart systemd-timesyncd - 验证是否生效:
timedatectl status | grep "System clock synchronized",输出yes才算成功 - 如果容器或 CI 环境中
systemd不可用,改用ntpd -q -n -p pool.ntp.org(需安装ntp包)
Windows 上强制重同步并换稳定 NTP 源
默认 time.windows.com 在休眠/唤醒后极易失效,且响应慢。必须手动指定更可靠的源,并确保服务真正运行。
- 以管理员身份运行 CMD,依次执行:
net start w32timew32tm /config /syncfromflags:manual /manualpeerlist:"time.nist.gov pool.ntp.org"w32tm /resync - 若报
The service has not been started,先补上net start w32time - 完成后执行
systeminfo | find "Time Zone",和 time.is 对比,误差应 ≤ 1 秒
为什么不能只改 Composer 配置或换镜像?
这类错误和镜像 URL、repo.packagist 配置、CA 证书路径全无关系——因为根本没走到 HTTP 请求那步。OpenSSL 在 TLS 握手初期就因时间校验失败而中断,连 TCP 连接都建不起来。
-
composer config -g repo.packagist再正确,也救不了系统时钟 -
curl.cainfo指向最新cacert.pem,同样无效 - 临时加
--no-secure-http或设secure-http false,完全不生效——这不是协议开关问题,是底层 SSL 握手直接崩了
真正卡住的地方在内核和 OpenSSL 之间,时间一错,整个 HTTPS 链路就断在起点。修时钟是最短路径,绕开它只会把问题拖进更深的配置迷宫。










