很多运维人员在部署OpenVPN多用户内网接入场景时,经常遇到离职用户仍能凭旧证书绕过账号密码校验直接接入内网的风险,证书吊销列表(CRL)是解决这类越权访问问题的核心方案,但不少人直接照搬网上零散的配置命令后,会出现证书校验失效、合法用户被误拦截的异常,本质是没有满足OpenVPN证书吊销列表配置前提,本文就把所有前置要求拆解清楚,帮你避开常见的配置陷阱。
1. 根证书与签发体系的合法性校验前提
很多人配置CRL之前没意识到,CRL本身是由根CA或者中间CA签发的附属签名文件,如果你当初搭建OpenVPN的时候用的是第三方一键脚本生成的随机自签证书,中途手动替换过CA公钥,后续生成的CRL签名会和服务端加载的CA链不匹配,完全无法生效。
你需要先确认OpenVPN服务端配置里ca字段指向的CA文件,就是当初签发所有用户证书的同一套CA体系导出的公钥文件,不能是中途替换的其他CA的导出文件,否则后续生成的CRL签名不会被服务端信任,所有客户端证书都会被判定为无效,直接导致全量用户无法接入VPN。
2. CRL文件的权限与存储路径合规前提
不少运维图方便把CRL文件放在系统临时目录,或者直接给CRL文件开777全局权限,这会带来两个层面的问题,一是OpenVPN服务端默认以非root的vpn用户身份运行的时候,会直接读不到被系统定期清理的临时目录里的CRL文件,二是过高的权限会触发OpenVPN内置的安全校验机制,主动拒绝加载存在非授权篡改风险的CRL文件。
正确的前置检查步骤是,先把CRL文件存放在OpenVPN服务端专属的配置目录下,和CA公钥、服务端证书、DH参数文件放在同一层级,文件所属用户设置为运行OpenVPN进程的专属账号,权限设置为仅该账号可读,避免其他运维人员随意修改CRL内容,破坏接入校验逻辑。
3. 服务端配置项的前置兼容检查
很多旧版本的OpenVPN安装包默认是没有开启CRL校验模块支持的,如果你是用多年前的旧系统源直接安装的低版本OpenVPN,没有单独编译加入CRL支持的话,就算你在配置文件里加了crl-verify字段,服务端启动的时候也会直接静默忽略这个参数,不会实际执行证书吊销校验逻辑。
你在正式配置CRL之前,需要先执行openvpn --version命令查看输出的特性列表,确认里面包含CRL的相关支持标识,同时要提前确认服务端配置里没有设置client-cert-not-validate这类跳过证书校验的参数,这类参数的优先级高于CRL校验,会直接让后续的所有吊销规则全部失效。
4. 吊销操作的流程一致性前提
不少运维遇到过明明已经把目标用户证书加入CRL了,该用户还是能正常接入的问题,排查后发现他们用来生成CRL的CA数据库,和当初签发用户证书的CA数据库不是同一个,相当于你在A账本上记了吊销记录,却拿着A账本的更新去B账本里找对应条目,自然不会触发对应的拦截规则。
你需要提前把所有签发用户证书的操作记录、证书索引文件统一存放在固定的CA工作目录下,每次执行吊销操作之后生成的新CRL,要直接覆盖服务端配置目录里的旧CRL文件,不需要重启OpenVPN服务,服务端会自动定时重新读取CRL的更新内容,不会影响其他在线用户的连接状态。
最后要注意一个常见的认知误区,很多人以为配置完CRL之后就可以一劳永逸,实际上CRL本身也有内置有效期,你需要提前设置好CRL的更新提醒,避免旧的CRL过期之后,服务端直接拒绝所有新的连接请求,同时不要把CRL的有效期设置得过长,否则出现批量吊销场景的时候,规则更新的滞后性会带来内网接入的安全风险。

