Linux 服务器时间同步失败,导致证书失效
你是否遇到过这种情况:用 curl 访问 HTTPS 网站时提示 certificate expired 或 certificate is not yet valid?
浏览器也警告证书无效。
直接排查证书本身没问题,那多半是 Linux 服务器系统时间偏差过大 导致证书有效期校验失败。
本文就从零开始,带你彻底修复时间同步问题,让 SSL/TLS 证书恢复正确验证。
先确认问题:你的系统时间准吗?
在动手修复前,先用几个命令看清现状。
登录服务器后依次执行:
date
查看当前系统时间。
接着用 timedatectl 获取更详细的状态:
timedatectl status
输出中的 NTP service: active 表示已启用自动同步,Time zone 应与你所在时区一致(如 Asia/Shanghai)。
如果显示 NTP service: inactive 或时间明显不对,那就是时间同步失败的根因。
小提示:如果时区没设对,时间可能差好几个小时,也会导致证书验证失败。
可以用 timedatectl list-timezones 查找你需要的时区,然后用 timedatectl set-timezone Asia/Shanghai 设置。
安装并配置 chrony(推荐)或 NTP 服务
现代 Linux 发行版默认用 chrony 做时间同步,它比传统 NTP 客户端更精准、更抗网络抖动。
如果系统中没有 chrony,先安装它。
CentOS / RHEL / Rocky Linux
yum install -y chrony
systemctl enable chronyd
Ubuntu / Debian
apt update && apt install -y chrony
systemctl enable chrony
安装后修改配置文件 /etc/chrony.conf(若用传统 NTP 则修改 /etc/ntp.conf)。
建议保留官方默认的 NTP 服务器池,或者换成国内镜像以加快同步速度。
在配置文件中加入或确认以下行:
pool cn.pool.ntp.org iburst
pool 0.cn.pool.ntp.org iburst
pool 1.cn.pool.ntp.org iburst
iburst 参数让初次同步时快速发出多个请求,缩短收敛时间。
如果你只想用传统 NTP 服务,而不是 chrony,先卸载 chrony 再安装 ntp:
yum install -y ntp # CentOS
apt install -y ntp # Ubuntu
timedatectl set-ntp false # 先关闭 chrony 的自动管理
systemctl enable ntpd && systemctl start ntpd
启动同步并验证时间更新
配置好服务后,手动启动并检查同步状态。
# 对于 chrony
systemctl restart chronyd
chronyc sources -v
看到输出列中的 ^* 或 ^+ 表示成功同步到上级 NTP 服务器。
接着用 date 和 timedatectl status 确认时间已更新为当前时间。
如果时间仍然不准,可能是因为防火墙阻止了 UDP 123 端口。
检查防火墙规则并放行 NTP 端口:
# 以 firewalld 为例
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
# 或者直接添加端口
firewall-cmd --add-port=123/udp --permanent
验证证书是否恢复
时间同步正确后,用 curl 测试 HTTPS 连接:
curl -I https://yourdomain.com
如果不再报证书错误,说明问题已解决。
也可以用 OpenSSL 精细检查:
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates
输出中的 notBefore 和 notAfter 都在合理范围内,且当前时间落在两者之间,就表明证书校验通过。
注意:即使时间同步了,如果证书本身已经物理过期(notAfter 早于当前时间),仍需向 CA 重新申请证书。
时间同步只解决因系统时间错误导致的误判。
避坑与常见问题解答
1. 为什么 chrony 启动了但时间不变?
最常见原因是 NTP 服务器不可达。检查网络连通性:ping cn.pool.ntp.org。另外,systemd 的 timesyncd 可能与 chrony 冲突。可以关闭 systemd-timesyncd:systemctl stop systemd-timesyncd && systemctl disable systemd-timesyncd。
2. 时区正确但同步后时间仍差几分钟?
可能是 NTP 服务器响应慢或跳跃限制。chrony 默认采用渐进调整,大幅偏差可能需要几次同步才能拉回。可以强制立即调整:
chronyc makestep
3. 生产环境需要配置多个 NTP 服务器吗?
建议配置至少 3 个不同地理位置的 NTP 源,避免单点故障。chrony 配置文件中用多行 pool 或 server 即可。
4. 重启服务器后时间又乱掉?
检查硬件时钟(RTC)是否也同步:timedatectl set-local-rtc 0(设为 UTC),并确保 systemctl enable chronyd 已启用开机自启。
如果你处理的是 Linux 服务器时间同步失败导致证书失效的场景,建议先按以上步骤完整执行一次,再根据自己的网络环境和服务版本做微调。
遇到异常时重点排查防火墙、NTP 服务器可达性以及时区设置,这三个点几乎覆盖了 90% 的问题原因。