很多运维人员排查OpenVPN连接失败故障时,第一反应优先检查端口连通性、防火墙规则和TUN网卡配置,往往容易忽略服务端证书异常这类隐蔽性较强的诱因,这类故障的报错信息经常和普通握手失败混淆,很容易浪费大量排查时间。这份实用指南完全围绕OpenVPN服务端证书连接失败排查的实际场景设计,所有步骤都可以直接在现有部署环境中落地执行,帮你快速定位证书类故障的根因。
前置排查:先区分证书类故障和其他连接故障
正式排查证书相关问题之前,首先要排除非证书类的连接干扰,你可以在客户端侧用nc或者telnet工具测试OpenVPN服务端默认的1194端口是否可达,确认端口没有被运营商、中间防火墙拦截,同时确认服务端的OpenVPN进程处于正常监听状态,避免后续把大量精力浪费在证书校验上,白鲸最后发现故障根源是端口没开放。

运维人员实操排查OpenVPN证书类连接失败故障
紧接着你可以导出OpenVPN客户端的完整连接日志,过滤日志里的关键词,如果出现certificate verify failed、CA not found、certificate expired这类明确和证书校验相关的提示,就可以直接锁定故障属于证书异常范畴,不需要再花时间排查路由规则、用户账号密码这类无关配置。
第一层排查:校验服务端证书的有效期与域名匹配规则
你可以直接登录部署OpenVPN服务端的服务器,进入存放证书的easy-rsa工作目录,执行openssl x509 -in server.crt -noout -dates命令,直接打印出服务端证书的生效时间和过期时间,很多运维部署完OpenVPN之后长期不维护,证书到期之后没有及时更新,客户端发起连接时直接拒绝握手,这类问题在所有证书类故障中占比最高。
接下来校验服务端证书的Common Name主体字段,确认这个字段填写的内容和客户端ovpn配置文件里remote参数后面跟的公网域名或者公网IP完全一致,不少运维生成证书时随便填了临时主机名,后续服务端更换公网接入地址之后,只更新了客户端的remote配置,没有同步更新服务端证书,就会触发证书主体不匹配的校验失败。
这里要特别提醒一个常见误区,很多人为了快速解决连接报错,直接在客户端配置里添加verify-x509-name的跳过校验参数,这种操作相当于直接废掉了OpenVPN证书体系的身份验证作用,VPN下载很容易让VPN连接遭遇中间人攻击,直接突破原本的隐私边界,生产环境绝对不能使用这类临时规避方案。
第二层排查:校验服务端CA根证书的链完整性
不少新手部署OpenVPN的时候,直接把服务端的server.crt文件发给客户端使用,没有把签发服务端证书的CA根证书ca.crt单独配置到客户端的ovpn文件中,后续服务端更新了CA根证书之后,客户端侧保留的旧根证书没有同步替换,就会出现根证书不被信任的连接报错。
你可以在服务端直接执行openssl verify -CAfile ca.crt server.crt命令,如果命令输出server.crt: OK的结果,就说明当前服务端的证书链是完整合法的,如果输出unable to get local issuer certificate的提示,白鲸就说明当前的服务端证书不是用当前存放的CA根证书签发的,证书链已经断裂。
如果你是用第三方公共SSL证书给OpenVPN服务端做配置,还要额外检查证书的扩展用途字段,确认用途列表里包含TLS Web Server Authentication的标识,普通的网站HTTPS证书如果没有开启这个扩展用途,OpenVPN服务端加载配置的时候也会直接抛出证书异常报错,导致服务完全启动失败。
最终验证:重启服务后双向校验连接状态
所有证书相关的配置修改完成之后,先不要直接通知所有终端用户发起连接,先在服务端本地重启OpenVPN服务进程,查看系统日志里的启动输出,确认没有任何证书加载失败的相关报错,证明服务端已经正常加载了更新后的整套证书文件。
找一台和服务端公网不在同局域网的测试客户端,导入更新后的全套证书和ovpn配置文件,尝试发起连接,确认TLS握手过程可以正常完成,服务端推送的路由、DNS等配置都能正常在客户端生效,没有出现任何证书校验相关的报错。
后续运维过程中你可以提前给OpenVPN的证书配置过期告警规则,不要等证书完全过期、大量用户集中上报连接故障才发现问题,同时定期备份整套证书签发的根文件,避免后续更新证书的时候找不到原始签发的CA文件,导致整套VPN的证书体系全部要重建。
白鲸官网 


