OpenVPNCA证书日常检查方法及有效性核验技巧 - shadowrocket
网络加速

OpenVPNCA证书日常检查方法及有效性核验技巧

不少运维人员都遇到过OpenVPN服务毫无征兆出现全量客户端连接失败的故障,排查防火墙规则、端口映射、服务端配置耗时数小时,最后才定位到是CA证书过期、被篡改或者部署不同步导致的问题。日常定期开展OpenVPN CA证书的状态巡检,是避免大面积VPN服务中断、守住内网访问权限边界的核心前置动作,很多管理员习惯把注意力放在VPN的路由规则、用户权限配置上,很容易忽略根证书的隐性异常,最终引发批量连接故障,下面就从实际运维场景出发,梳理可落地的检查流程和有效性核验技巧。

网络设备:OpenVPN CA证书:日常

运维人员正在开展OpenVPN CA证书的日常巡检与有效性核验工作。

OpenVPN CA证书异常的典型前置现象

第一个典型现象是所有新客户端发起连接时直接弹出证书不受信的报错,哪怕运维近期没有修改过客户端配置、服务端参数,也没有调整过防火墙的访问规则,这类故障基本可以优先排除网络层面的问题。

第二个典型现象是存量已经在线的VPN连接随机出现无理由断连,重连后始终卡在TLS握手阶段无法完成,排除带宽拥堵、公网链路波动的影响之后,就要第一时间排查CA证书的有效性状态。

第三个典型现象是部分新接入的客户端可以正常连接VPN,另一部分同版本系统的客户端提示证书校验失败,shadowrocket这种情况大概率是运维更新CA证书时只替换了服务端的证书文件,没有同步所有客户端的信任根,属于CA证书部署不同步的衍生异常。

基础属性项日常逐项检查方法

首先要准确定位OpenVPN服务端存储CA证书的实际路径,大部分Linux发行版的默认部署路径是/etc/openvpn/server/ca.crt,部分自定义路径部署的环境可能把证书放在单独的加密目录下,绝对不能直接调用系统根证书库的文件代替OpenVPN专属的CA证书文件,避免出现证书权限不匹配的问题。

用系统自带的openssl命令执行基础属性查询,在命令行输入openssl x509 -in ca.crt -noout -dates,输出结果里的notBefore字段是证书的生效时间,notAfter字段是证书的到期时间,这里要注意不要只粗略看年份,部分证书的到期时间刚好覆盖法定节假日,很容易错过预警窗口。

接下来要检查CA证书的签发者标识,执行openssl x509 -in ca.crt -noout -subject,输出的内容里要包含预先规划好的组织名、根CA通用名,如果发现签发者标识不是内网自建的根CA,大概率是证书被篡改或者部署时误用了其他公网服务的证书文件。

跨端有效性核验实操技巧

完成服务端的属性检查之后,还要在任意一台正常的VPN客户端上做反向核验,把客户端本地存储的CA证书文件导出,用同样的openssl命令查询证书的哈希指纹,和服务端CA证书的指纹做逐字符比对,确认两端的根证书完全一致。

接下来可以用OpenVPN自带的模拟连接命令做连通性预校验,小火箭加速器在服务端执行openvpn --test-crypto --secret ta.key --ca ca.crt,如果命令行没有抛出证书校验失败的报错,就说明当前CA证书和服务端配置的tls-auth密钥是完全匹配的。

还要核验CA证书的签名权限,确认当前CA证书的扩展属性里包含CA:TRUE的标识,如果这个属性被误改成CA:FALSE,后续签发的所有客户端证书、服务端证书都不会被信任,哪怕所有证书都在有效期内也会直接校验失败。

常见检查误区规避

很多管理员日常检查只看证书有效期,忽略CA证书关联的CRL吊销列表更新状态,如果之前有被泄露的客户端证书需要吊销,但是CRL文件没有同步更新,哪怕CA证书本身完全有效,也会导致被吊销的设备依然可以接入VPN,出现内网访问权限泄露的风险。

不要直接用公网可信CA签发的证书代替自建的OpenVPN根CA证书,公网CA签发的普通服务器证书默认不支持签发二级客户端证书的权限,后续批量生成客户端证书时会出现隐式校验不通过的问题,很难快速排查出根因。

检查完成之后要把CA证书的到期预警配置到运维监控平台,不要靠人工日历备注,尤其是多套VPN集群同时部署的场景下,很容易遗漏某一个节点的CA证书更新时间,引发不必要的业务中断。

Wi-Fi 与路由器编辑组 | shadowrocket
检查无线信号、设备摆放与有线连接,逐步定位家庭网络瓶颈。
查看更多文章
连接指南

从一个连接问题开始

遇到宽带拨号重连后的VPN恢复相关问题,可从“等待宽带恢复后建立新请求,再查看客户端重连日志”开始阅读。旧请求报错并不证明新的网络路径仍然异常,需要结合具体环境判断。