很多运维人员在部署OpenVPN证书吊销列表功能时,经常遇到配置完不生效、合法客户端被误拦截、甚至服务直接启动失败的问题,这类故障九成以上都不是配置参数写错了,而是没有提前满足对应的配置前提要求。本文从实际故障排查的视角,逐项拆解OpenVPN证书吊销列表:配置前提的所有校验项,帮你提前规避大部分部署坑点。
现象前置:先确认现有OpenVPN PKI体系的完整性
很多运维刚接触CRL配置的时候,上来就直接往服务端配置文件里加crl-verify参数,结果重启服务直接报错,服务完全起不来,这是最常见的初始故障现象。
对应的第一项排查动作是检查PKI根证书的签发权限,你得确认当前OpenVPN使用的CA根证书,是你自己通过easy-rsa或者openssl工具生成的,而不是直接从第三方公共CA申请的普通业务证书,公共CA签发的证书默认不开放自定义CRL的管理权限,强行配置也无法写入吊销条目。
预期检查结果是你能找到根证书对应的ca.key私钥文件,且私钥没有设置无法解密的强密码,或者你日常运维CA的时候可以正常输入密码解锁私钥生成新的证书,要是找不到ca.key文件,后续所有CRL生成操作都无法完成,必须先重建完整的PKI体系。
权限前置:OpenVPN服务端的文件访问权限校验
第二个常见的故障现象是CRL文件明明已经生成,也写入了正确的吊销客户端条目,但是被吊销的客户端依然可以正常连接服务端,完全没有触发拦截规则。
逐项排查的时候首先要确认CRL文件存放的路径,没有设置过于严格的访问控制,OpenVPN的服务进程默认是以非root的独立用户身份运行的,很多运维把CRL放在/root目录下,普通进程用户根本没有读取权限,自然无法校验吊销状态。
预期校验结果是你切换到OpenVPN运行的同名用户身份,尝试直接cat读取CRL文件可以正常输出完整的证书吊销列表内容,没有权限拒绝的报错,同时CRL文件的所属组和所属用户,和OpenVPN服务端配置里指定的user、group参数值完全匹配。
时间逻辑前置:CRL文件的有效期与时间同步要求
还有一类隐蔽的故障现象是部分客户端可以被正常拦截,部分客户端哪怕已经被加入CRL,依然可以间歇性连接成功,排查半天找不到配置逻辑的问题。
对应的排查项首先是检查服务端和所有客户端的系统时间是否同步,CRL文件本身自带生效时间和过期时间戳,如果OpenVPN服务端的系统时间比CRL的生效时间还要早,服务端会直接判定当前CRL还未生效,临时跳过吊销校验逻辑。
接下来要确认你生成的CRL文件本身的剩余有效期,没有处于过期状态,一旦CRL过期,OpenVPN服务端默认会直接拒绝所有客户端的连接请求,哪怕是证书完全合法的正常客户端也会被拦截,很多运维配置完CRL之后忘了定期更新,等到CRL过期才发现整个VPN服务彻底不可用。
这里要注意一个常见误区,不要为了省事把CRL的有效期设置得过长,一旦CRL长期不更新,后续如果有新的吊销需求,你写入的新条目也不会被服务端识别,合理的更新周期需要和你自身的VPN运维频率匹配,不需要设置过长的过期时间。
配置逻辑前置:服务端与客户端的证书校验规则对齐
最后一类容易被忽略的前提,是你不能在OpenVPN服务端配置了CRL校验之后,还同时开启了客户端证书用户名映射的免校验规则,部分运维为了方便做账号审计,配置了通过证书common name自动映射系统用户的规则,同时加了跳过证书状态校验的参数,会直接覆盖CRL的拦截逻辑。
最后做最终的前置校验的时候,你可以先拿一个还没有被吊销的普通测试客户端证书,尝试连接VPN服务,确认正常连接的日志里可以看到服务端已经成功加载CRL文件的提示,没有任何CRL相关的警告报错,再去测试被吊销客户端的拦截效果。
星驰VPN 
