Linux 服务器时间不同步,导致证书过期
你是否遇到过浏览器提示证书过期,但检查证书明明还在有效期内?
这种情况十有八九是服务器时间不同步导致的。
下面我会从零开始,教你彻底搞定Linux服务器的时间校准,顺手解决证书失效的困扰。
先确认时间是不是罪魁祸首
登录服务器后,先看看当前系统时间:
date
再比对一下真实时间(比如手机或电脑)。
如果相差几分钟以上,很可能就是这个问题。
接着检查证书状态:
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates
如果输出显示证书有效日期正常,但服务器本地时间远超出范围,那问题就确认了。
三步让服务器时间恢复正常
第一步:安装时间同步工具
多数Linux发行版已经内置了ntpdate或chrony,如果没装,按系统选择:
- CentOS / RHEL:
yum install -y ntpdate chrony - Ubuntu / Debian:
apt install -y ntpdate chrony
如果你用的是宝塔面板,直接在软件商店里搜索“NTP”或“chrony”安装即可。
第二步:手动同步一次时间
先停止自动同步服务(避免冲突),然后强制校准:
systemctl stop chronyd # 如果使用chrony
ntpdate -u ntp.aliyun.com
如果ntpdate报错,可以换一个NTP服务器:ntpdate -u ntp.tencent.com或ntpdate -u cn.pool.ntp.org。
同步后再次执行date看时间是否已更新。
第三步:设置时区并开启自动同步
时区错误也会导致证书对比出错。
指定时区为Asia/Shanghai:
timedatectl set-timezone Asia/Shanghai
然后启动时间同步服务并设置开机自启:
- 使用chrony:
systemctl start chronyd
systemctl enable chronyd
- 使用ntpdate + crontab(简单方式):
echo "*/30 * * * * /usr/sbin/ntpdate -u ntp.aliyun.com > /dev/null 2>&1" >> /var/spool/cron/root
验证自动同步是否配置成功:
chronyc sources -v # chrony状态
timedatectl status # 确认NTP synchronized为yes
避坑指南:这些细节最容易忽略
- 防火墙拦截NTP端口:UDP 123端口必须放行。检查命令:
firewall-cmd --list-all | grep 123
如果被拦截,执行:firewall-cmd --add-port=123/udp --permanent && firewall-cmd --reload。
- 云平台NTP黑洞:某些云服务器(如AWS、阿里云)默认使用内部NTP服务器,如果你替换成公共服务器可能超时。建议直接使用云平台提供的NTP地址(例如阿里云:
ntp.aliyun.com)。 - 硬件时钟(RTC)未更新:同步系统时间后,记得把时间写入主板CMOS:
hwclock -w
否则重启后时间会复原。
- 证书验证仍报错:如果时间已经校正,但浏览器依然报证书过期,请清空浏览器缓存或换隐身模式测试。部分CDN或反向代理需要重启Nginx才能加载新证书。
高频问题速查
Q:为什么同步完时间后,证书还是报错?
A:先检查时区是否匹配证书颁发机构的时区(通常为UTC)。执行timedatectl查看“Time zone”和“RTC in local TZ”。建议统一设置为Asia/Shanghai或UTC,证书验证不受时区影响,但服务器时间偏差不能超过几分钟。
Q:没有root权限能同步时间吗?
A:普通用户无法执行ntpdate和timedatectl,需要联系管理员授权或使用sudo。
Q:ntpdate命令找不到怎么办?
A:安装ntpdate包即可。另外部分新版系统不再预装ntpdate,你可以改用chrony -q或者timedatectl set-ntp true。
验证成果:证书彻底恢复正常
再次执行最初的两条命令:
date
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates
如果当前时间落在证书的“notBefore”和“notAfter”之间,就说明问题解决了。
建议持续观察一周,确认自动同步稳定运行。
如果你正在处理 Linux 服务器时间不同步,导致证书过期,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。