很多运维人员在配置OpenVPN证书吊销列表时,经常出现配置完成后已经吊销的客户端依然能正常接入、CRL规则完全不生效的问题,这类故障大多不是配置命令书写错误,而是没有提前满足OpenVPN证书吊销列表配置前提要求,本文从实际故障排查的实操角度,逐项梳理所有前置校验项,帮大家规避后续的隐性运行故障。
根CA与签发体系的权限归属校验
很多人容易忽略的第一个OpenVPN证书吊销列表配置前提,就是OpenVPN服务端使用的证书,和后续要生成CRL的根CA,必须属于同一套签发体系,不能用第三方公共CA签发的服务端证书,再私下自建一套根CA生成CRL,这种跨体系生成的CRL天然不会被OpenVPN服务端识别。
排查这个校验项的时候,可以分别查看OpenVPN服务端证书的issuer字段,和CRL文件的issuer字段,两个字段的所有内容必须完全匹配,不能出现任何字段差异。

运维人员提前核查OpenVPN证书签发体系匹配性,规避CRL配置不生效的隐性故障
这里的常见误区是,部分管理员为了省事,直接用OpenVPN服务端自身的证书作为根CA签发其他客户端证书,海鸥后续生成的CRL会出现证书权限层级不匹配的问题,必须单独部署独立的根CA,所有服务端、客户端证书都由这个根CA统一签发,才能保证CRL的合法性。
OpenVPN服务端版本与CRL特性的兼容性校验
部分老旧的OpenVPN 2.3之前的版本,原生对CRL的标准格式支持存在缺陷,哪怕你配置的文件路径完全正确,也会出现服务端启动直接报错,或者加载CRL之后直接拒绝所有客户端连接的异常问题。
检查这个OpenVPN证书吊销列表配置前提的时候,可以在OpenVPN部署的服务器上执行openvpn --version命令,确认版本号高于2.4稳定版,同时要确认你使用的OpenVPN编译版本没有被发行方裁剪掉CRL相关的x509校验模块。
这里的典型故障现象是,配置完crl-verify参数之后服务端直接启动失败,很多人第一反应是文件路径书写错误,实际上是版本不兼容导致的特性缺失,海鸥VPN官网反复修改路径也无法解决问题。
CRL文件的权限与路径可访问性校验
很多管理员生成CRL之后,直接把文件放在自己的root家目录下,权限设置为只有root用户可读,但是OpenVPN服务端运行时的身份是配置文件里指定的非特权用户,这时候服务端根本读取不到CRL文件,自然不会触发任何吊销校验逻辑。
排查这个校验项的时候,你要先确认OpenVPN服务端配置文件里指定的运行用户身份,再给CRL文件设置对应的可读权限,同时要注意CRL文件所在的目录不能开启noexec的挂载属性,否则OpenVPN加载x509类文件的时候会被系统安全规则拦截。
这个校验项的预期通过结果是,你切换到OpenVPN的运行用户身份,直接cat对应的CRL文件可以正常输出内容,没有任何权限不足的报错,这一步才算校验完全通过。
证书校验模式的前置开关确认
OpenVPN默认的配置逻辑里,只有没有开启client-cert-not-required参数的前提下,才会正常执行全链路的证书校验逻辑,要是你之前为了方便部分用户接入,关闭了客户端证书校验,那CRL的吊销逻辑根本不会被触发,哪怕你配置了完全正确的CRL文件也完全不生效。
排查这个OpenVPN证书吊销列表配置前提的时候,你要打开现有的OpenVPN服务端配置文件,确认没有配置client-cert-not-required参数,同时也不能设置username-as-common-name来完全替代客户端证书身份校验,否则CRL的匹配规则没有对应的证书身份数据源,自然无法识别被吊销的客户端。
很多管理员遇到的“已经把客户端证书加入CRL但客户端依然能连接”的故障,绝大多数都是这个前提没有满足,之前为了方便临时开了免证书登录,后续忘了改回来,直接配置CRL自然不会有任何效果。
所有这些前提项全部校验通过之后,你再写入crl-verify参数指定CRL文件路径,后续更新CRL的时候只需要向OpenVPN服务端发送SIGHUP信号重载配置即可,不需要重启服务中断现有正常用户的连接。




