如何在 OpenVPN 中允许(一些)过期的客户端证书?

如何在 OpenVPN 中允许(一些)过期的客户端证书?

我想为客户端证书过期的情况做好准备,并想知道是否有任何选项/钩子可以用来告诉 OpenVPN 接受客户端证书,即使它们已经过期?

看看参考手册,我只发现了一些可以替代或额外检查的东西,而且大多是在 OpenVPN 本身已经验证了证书之后。但我找不到任何东西来告诉 OpenVPN 应该进行正常的证书验证,但如果证书已过期,只需仍然允许它或使用一些脚本询问我。

–tls-verify cmd仅在所有其他测试都已通过后才运行,但如果证书过期,则失败。 的情况似乎也是如此-management-client-auth。 听起来–verify-client-cert none|optional|require很有希望,但似乎根本不是我需要的情况。 使用用户名+密码对我的用例没有帮助,因为这将涉及重新配置大量客户端,在这种情况下,我也可以简单地更改证书。 我需要一些依赖证书但能给我带来一些额外影响的东西。

那么目前有可能吗?从我读到的内容来看,答案似乎是否定的。谢谢!

答案1

最近遇到了这种情况;不幸的是,项目立场似乎是这种能力可能会被滥用,所以他们不会这样做:https://sourceforge.net/p/openvpn/mailman/message/26580749/

同一篇文章中提出了一个想法 - 暂时将服务器上的时钟倒转,这在一般情况下可能会适得其反,但可以让证书看起来像是“当前的”。

类似地,有些库可以将时钟倒转或设置为静态值,正如 libc 日期相关函数所报告的那样,如果通过 LD_PRELOAD 链接,此库将劫持这些函数。这通常用于可重现的软件包构建,因此当前时间等变量不会使每个构建都独一无二。就我而言,https://github.com/wolfcw/libfaketime工作了(我只是查看了正在运行的 openvpn 服务器的参数,停止了它,然后在faketime包装程序中重新运行了相同的命令行) - 并且它打包在许多发行版中,所以你的发行版中可能就有它。

请注意,如果您的 VPN 服务器认为正确的时钟是一周或一个月前,它将拒绝访问维护良好的客户端,这些客户端的证书比该时间戳更新,并且其有效性尚未“开始”。如果您的 VPN(如我帮助提出的 VPN)分批发送证书(例如每年一次),您可能会陷入以下漏洞:

  • 服务器无法启动,因为其倒带/伪造的时钟不信任其太新的证书
  • 所以你调整配置并使用以前的证书
  • 您尝试联系的客户端不信任过时的服务器证书 - 他们的时钟没有问题

您可以通过颁发在您感兴趣的两个时间范围内都有效的附加 VPN 服务器证书来取得成功。不确定 easyrsa 是否能让这变得简单……但 faketime 包装它可能会 ;) 或者只是直接使用 openssl。

另一个想法可能是设计一个 openvpn 代码补丁来放松其检查,并暂时运行此版本,故意使用后门作为您的服务器。然后在您使用较新的证书更新被忽略的客户端后立即将其修复(运行原始实现)以确保安全。

相关内容