本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
周日,原本在家吹空调,吃西瓜,看着欧洲高温没空调的新闻呢,业务突然找到我说 xx 系统有问题,数据没法提交。
原本业务说不紧急的,周一再处理。但我想着,闲着也是闲着,就打开电脑准备看看是什么问题。
谁知,公司里的 VPN 怎么也连接不上了。看了下连接日志,像是 SSL 证书问题。结合 AI 分析日志,最终发行确实是证书过期了,所以接下来,我就分享一下这次 OpenVPN 证书过期故障排查与修复全记录,一次完整的 OpenVPN 证书过期故障排查、分析与修复实战。
故障现象
其实,最开始我没怀疑是 OpenVPN 的问题。直到系统一直登录不少,我准备重连一下。
说实话,之前连接的时候,也有日志信息,但我都没仔细看过。直到这次重连之后,后台系统还是登录不上,我才注意到客户端日志里有些红色字体,仔细一看好像提示的是证书有问题。
下面是客户端连接 VPN 时,出现的部分红色信息。
VERIFY ERROR: depth=0, error=certificate has expired: CN=server
TLS Error: TLS handshake failed
核心错误是certificate has expired,服务器证书过期了。
文章配图参见 https://mp.weixin.qq.com/s/yn9MBGDcPRTSZWEynZ6b_g。
排查过程
出现问题后,第一时间找运维,可运维也连接不上。只能周一了再看。
周一想起来这回事了,赶紧找运维。谁知运维换人了,几台机器,根本不清楚 OpenVPN 安装在哪一台上。
于是乎,我赶紧用 AI 写了一个脚本,让它自动在几台服务器上查找 OpenVPN,最终找到了它。
确认证书状态
找到了后,我就登录到这台 OpenVPN 服务器是,根据 AI 提示查看证书详细信息。
cd /etc/openvpn/easy-rsa/
./easyrsa show-cert server
对应的输出结果显示如下所示。
Not Before: Mar 1 09:43:24 2024 GMT
Not After : Jun 4 09:43:24 2026 GMT
今天是 2026 年 6 月 29 日,证书却在 2026 年 6 月 4 日就过期了。
检查服务状态
接下来,我确认了 OpenVPN 服务运行状态。
systemctl list-units | grep -i openvpn
找到正确的服务名称,openvpn@server.service。
我看了 AI 给我的提示,推荐我重新生成证书。其中,步骤有点多,我又让 AI 写了一个脚本,一次搞定。
下面是拆开的过程。
进入 easy-rsa 目录,执行下面的撤销旧证书命令。
cd /etc/openvpn/easy-rsa/
./easyrsa revoke server
根据提示,输入yes确认撤销操作即可。
注意,如果遇到Request file already exists错误,可以使用--force参数强制覆盖。
./easyrsa --force build-server-full server nopass
接下来是,重新生成证书了,执行下面的命令即可。
./easyrsa build-server-full server nopass
接着,可以查看生成新的证书撤销列表(CRL)。
./easyrsa gen-crl
如果需要备份旧证书,可以自行备份,我这里就略过了,直接复制新证书到 OpenVPN 目录。
cp pki/issued/server.crt /etc/openvpn/server.crt
cp pki/private/server.key /etc/openvpn/server.key
cp pki/crl.pem /etc/openvpn/
然后,重启 OpenVPN 服务即可完成证书更换。
systemctl restart openvpn@server
在这个过程中,如果客户端证书也已过期,也需要重新生成,我建议是一并更换了事。
cd /etc/openvpn/client
./ovpn_user.sh username
执行后会在/etc/openvpn/client/keys/目录下生成新的username.zip压缩包,发给需要的同事替换即可。
客户端遇到的其他问题
在排查过程中,客户端还遇到ta.key文件找不到的问题。
Cannot pre-load keyfile (ta.key)
解决方法就是确保ta.key文件与.ovpn配置文件在同一目录下,或者使用绝对路径引用。
如果需要设置更长的证书有效期,则可以修改vars配置文件。
vim /etc/openvpn/easy-rsa/vars
设置证书有效期(天数):
set_var EASYRSA_CA_EXPIRE 3650 # CA证书10年
set_var EASYRSA_CERT_EXPIRE 3650 # 普通证书10年
当然,如果想要更彻底一点,可以写一个定期检查证书有效期的脚本,监控脚本check_cert_expiry.sh。
#!/bin/bash
CERT_FILE="/etc/openvpn/server/server.crt"
EXPIRY=$(openssl x509 -enddate -noout -in $CERT_FILE | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_EPOCH - $NOW_EPOCH) / 86400 ))
if [ $DAYS_LEFT -lt 30 ]; then
echo "Warning: Server certificate expires in $DAYS_LEFT days!"
fi
然后,可以配合 cron 定时任务,提前告警。
如果是更尽职的运维,虽然 OpenVPN 证书不支持自动续期,但可以提前生成新证书并在计划维护窗口更换。或者是通过脚本等其它监控软件等,实现监控、告警、替换一条龙服务。
这些事,其实都不难,前提是有 AI 的帮助。
总结
现在有了 AI,真是极大的方便了。
如果贵司服务器也接入了 AI 能力,那就更简单了。比如重启服务器,查看日志、分析日志等等一些简单操作,只需要一句话 AI 就能自主完成。

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » OpenVPN 证书过期了,AI 写了所有修复脚本