乐于分享
好东西不私藏

OpenVPN 证书过期了,AI 写了所有修复脚本

OpenVPN 证书过期了,AI 写了所有修复脚本

你知道的越多,不知道的就越多,业余的像一棵小草!

你关注,我们一起精进!你星标,我们便有了更多故事!

业余时间 Java 种草!

编辑:业余草

推荐:https://t.zsxq.com/EiF91

历史文章推荐:

DeepSeek 开源的 DSpark,推理加速 80%,没上 Github 周榜

GPT-5.6 震撼发布,但限流了日、地、月全家桶矩阵

HTTP QUERY 方法来了,RFC 10008 正式发布,再见 GET 和 POST

AI 写了大量代码,却从不清理所有僵尸依赖

不花一分钱让 AI 生成视频,OpenMontage 爆火 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 就能自主完成。