我有一个现有的 PKI,我想将 OpenVPN 服务器集成到其中。我已包括CRL 分发点进入我的链中的每个 CA 证书,并将 CRL 发布到我的 OpenVPN 服务器可以访问的位置。
问题是OpenVPN服务器似乎完全忽略了CRL 分发点扩展以支持其自己的--crl-verify
选项。如果我撤销用户的证书并发布新的 CRL,OpenVPN 将很乐意继续让该客户端连接。我不明白为什么 OpenVPN 不读取这些扩展,因为它们正是为此目的而添加的。
我只能想到两种检查 CRL 的替代方法:
1) 我可以有一个 cronjob 将 CRL 复制到 OpenVPN 服务器并使用该--crl-verify
选项。但由于我有一个 CA 链,如何将所有 CRL 放入一个文件中?如果我使用 的文件夹模式--crl-verify
,链中的每个 CA 都有自己的序列号方案,这有问题吗?
2) 我尝试避免调用任何外部脚本,而只使用内置脚本,因为我假设手动操作越多,就越有可能引入安全漏洞。我错了吗?编写自己的脚本来检查我的 CRL 是正确的选择吗?
有什么方法可以让 OpenVPN 检查CRL 分发点包含在我的证书链中,最好使用 OpenVPN 内置的机制?
编辑:如果知道在客户端是否有方法可以做到这一点(即,让客户端检查 OpenVPN 服务器证书的有效性),那就太好了。如果--crl-verify
使用 URL,那就简单多了。
答案1
我认为您说得对,OpenVPN 没有此功能。
至于原因,我没有答案,只是觉得 OpenVPN 更常见的设置方式是使用他们自己的相当简单的easy-rsa用于专用 PKI。
这似乎--crl-verify ...
与多个 CA 的 CRL 不太兼容。
但是,如果您使用--capath dir
而不是--ca file
来配置 CA,则该capath
选项需要该目录中的 CA 证书和 CRL。我相信如果您定期将 CRL 导出到 OpenVPN 服务器,这将是可行的选择。
另一个选择是挂接脚本,我同意您应该谨慎实施。
您可以将钩子与环境变量结合使用。--tls-verify cmd
这将 允许您的自定义脚本(手头有对等方的证书)对 TLS 握手是否成功拥有最终决定权。--tls-export-cert directory
peer_cert
(请参阅上面提到的配置选项手册了解详情。