如何防止用户在 OpenVPN 中共享证书?

如何防止用户在 OpenVPN 中共享证书?

我有一个使用证书和 LDAP 身份验证的 OpenVPN 服务器。

问题是,一个用户可以共享他的证书,而其他有效的 LDAP 用户可以使用该证书。

问题

如何确保 Bob 的证书只能与 LDAP 用户“bob”一起使用?

答案1

根据这个帖子common_name用户无法伪造。

将此添加到 openvpn server.conf

script-security 2

# untrusted state
auth-user-pass-verify /etc/openvpn/scripts/check_cn_on_connect.sh via-env

/etc/openvpn/scripts/check_cn_on_connect.sh包含

#!/bin/bash

# username and common_name must be the same to allow access.
# users are not allowed to share their cert
if [ $username != $common_name ]; then
   echo "$(date +%Y%m%d-%H%M%S) DENIED  username=$username cert=$common_name" >> /var/log/openvpn-access.log
   exit 1
fi

echo "$(date +%Y%m%d-%H%M%S) GRANTED username=$username cert=$common_name" >> /var/log/openvpn-access.log

exit 0

更新

这是针对 OpenVPN 2.1.4 的。在 2.2.0 中,他们添加了许多新变量,您可以通过 查看env >> /tmp/env,其中一个新变量是证书指纹/序列号。

答案2

有很多选择,因为 OpenVPN 是一个开源项目,并且它具有编写自己的身份验证钩子的能力,有许多人做了许多不同的事情来提供不同级别的身份验证。

我还没有尝试过其中的大部分,只是在文档/博客/邮件列表中看到过它们。其中一些可能需要补丁或非免费版本。

一种主要方法是使密钥对的私有部分难以提取/复制。

如果保护密钥的成本过高、不受您的客户端平台支持或者由于其他原因而无法实现,那么您只剩下几个选择。

  • 要求经常更新证书,因此复制的证书不能长期使用。
  • 在服务器上设置大量日志,以观察异常情况。如果 Bob 通常只从他家登录,然后有一天,他开始从 Acme Inc. 登录,那么您可能需要进行调查。

  • 设置多因素身份验证。您的证书被视为“您拥有的东西”。因此,您应该在“您是的东西”或“您知道的东西”中寻找替代方案。这包括生物特征或密码/密码短语。

  • 正如我所提到的,OpenVPN 提供了非常灵活的身份验证。这使用选项auth-user-pass-verify。此选项将提供的用户名和密码传递给外部脚本/程序,该脚本/程序将根据您的需要做出身份验证决定。

答案3

我不是安全专家,我对安全非常严格。你的问题恰恰触及了 IT 安全的核心:信任。在我看来,永远不要认为鲍勃是可以信任的。当然,鲍勃可能是一个非常善良、值得信赖的人。他已经在贵公司工作了 20 多年。然而,“鲍勃”这个人与你的 IT 基础设施完全无关。

Bob 使用任意“中继”来允许访问。中继可以是任何东西:密码、证书、硬件令牌、虹膜扫描、DNA。它们是允许访问您系统的密钥。如果您的问题是关于验证使用密钥的人的身份,那么唯一诚实的答案可能是您必须在同一个房间里。在所有其他情况下,我认为您不能确信 Bob 真的是 Bob,并且在获得访问权限时没有被枪指着。因此,在您的 IT 基础设施设计计划中,合乎逻辑的做法是不要提及“Bob”:实体获得了您网站的访问权限。

因为你只能真正知道“一个实体”用你过去分发的钥匙获得了访问权限,所以正确的观点可能是限制钥匙可以打开的门的数量。你分发的钥匙越多,它们打开的门就越少。

OpenVPN 还具有一个选项,允许每个密钥仅允许一个并发连接。然后,如果 Alice 使用 Bob 的密钥登录,而 Bob 已经在内部,则 Alice 将被拒绝访问。不幸的是,这也意味着当 Alice 使用 Bob 的密钥登录时,Bob 无法登录。因此,您应该配置系统以通知您来自多个源 IP 的并发登录尝试。当发生某些违规行为时,同时启动两者,这样 Bob 就必须拨打电话寻求帮助。

要点是:不要对自己不能确定的事情抱有信心,在设计安全计划时要牢记这一点。假设总有一个比你更聪明的人,远远领先于你,迫不及待地想要证明你是错的……只是为了好玩而已。:-)

相关内容