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

Tho*_*ing 9 vpn openvpn certificate

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

\n\n

查看参考手册,我只发现可以替代或附加检查的内容,然后大部分是在 OpenVPN 本身验证证书之后。但我找不到任何信息告诉 OpenVPN 应该进行正常的证书验证,但如果证书已过期,仍然允许它或选择使用某些脚本询问我。

\n\n

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

\n\n

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

\n

Jim*_*mov 6

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

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

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

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

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

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

另一个想法可能是为 openvpn 代码设计一个补丁以放松其检查,并临时运行此构建并故意将后门作为您的服务器。然后,一旦您使用更新的证书更新被忽略的客户端,就可以安全地修复它(运行原始实现)。