你知道的越多,不知道的就越多,业余的像一棵小草!
你关注,我们一起精进!你星标,我们便有了更多故事!
业余时间 Java 种草!
编辑:业余草
推荐:https://t.zsxq.com/EiF91
历史文章推荐:
DeepSeek 开源的 DSpark,推理加速 80%,没上 Github 周榜
周日,原本在家吹空调,吃西瓜,看着欧洲高温没空调的新闻呢,业务突然找到我说 xx 系统有问题,数据没法提交。
原本业务说不紧急的,周一再处理。但我想着,闲着也是闲着,就打开电脑准备看看是什么问题。
谁知,公司里的 VPN 怎么也连接不上了。看了下连接日志,像是 SSL 证书问题。结合 AI 分析日志,最终发行确实是证书过期了,所以接下来,我就分享一下这次 OpenVPN 证书过期故障排查与修复全记录,一次完整的 OpenVPN 证书过期故障排查、分析与修复实战。

故障现象
其实,最开始我没怀疑是 OpenVPN 的问题。直到系统一直登录不少,我准备重连一下。
说实话,之前连接的时候,也有日志信息,但我都没仔细看过。直到这次重连之后,后台系统还是登录不上,我才注意到客户端日志里有些红色字体,仔细一看好像提示的是证书有问题。
下面是客户端连接 VPN 时,出现的部分红色信息。
VERIFY ERROR: depth=0, error=certificate has expired: CN=serverTLS Error: TLS handshake failed核心错误是certificate has expired,服务器证书过期了。
排查过程
出现问题后,第一时间找运维,可运维也连接不上。只能周一了再看。
周一想起来这回事了,赶紧找运维。谁知运维换人了,几台机器,根本不清楚 OpenVPN 安装在哪一台上。
于是乎,我赶紧用 AI 写了一个脚本,让它自动在几台服务器上查找 OpenVPN,最终找到了它。
确认证书状态
找到了后,我就登录到这台 OpenVPN 服务器是,根据 AI 提示查看证书详细信息。
cd /etc/openvpn/easy-rsa/./easyrsa show-cert server对应的输出结果显示如下所示。
Not Before: Mar 109:43:242024 GMTNot After : Jun 409:43:242026 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.crtcp pki/private/server.key /etc/openvpn/server.keycp 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/bashCERT_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 ]; thenecho"Warning: Server certificate expires in $DAYS_LEFT days!"fi然后,可以配合 cron 定时任务,提前告警。
如果是更尽职的运维,虽然 OpenVPN 证书不支持自动续期,但可以提前生成新证书并在计划维护窗口更换。或者是通过脚本等其它监控软件等,实现监控、告警、替换一条龙服务。
这些事,其实都不难,前提是有 AI 的帮助。
总结
现在有了 AI,真是极大的方便了。
如果贵司服务器也接入了 AI 能力,那就更简单了。比如重启服务器,查看日志、分析日志等等一些简单操作,只需要一句话 AI 就能自主完成。

夜雨聆风