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


8

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

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

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

Answers:


9

根据这篇文章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这些变量,其中这些新变量之一是证书指纹/序列号。


4

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

我还没有尝试过大多数,只是看到它们在docs / blogs / maillists中提到过。其中一些可能需要修补程序或非免费版本。

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

如果保护它们的密钥成本过高,客户端平台不支持或由于其他原因而无法实现,那么您将有一些选择。

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

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

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

我可以使用auth-user-pass-verify /etc/openvpn/scripts/connect.sh via-env获取用户名。您知道我是否也可以从用户使用的证书中获取ID吗?如果是这样,那么我可以编写一个Perl脚本来检查具有已知证书ID的yaml文件。
桑德拉

1
不幸的是,我不知道从所使用的证书获取id / subject / details的方法,但这并不意味着不可能。
Zoredache

找到解决方案并将其发布。
桑德拉

1

我不是安全专家,我对安全性很严格。您的问题正好达到IT安全的核心:信任。如我所见,永远不要以为鲍勃可以被信任。当然,鲍勃可能是一个非常友好和值得信赖的人。他在贵公司工作了20多年。但是,“鲍勃”这个人与您的IT基础架构完全无关。

鲍勃使用允许访问的任意“继电器”。中继可以是任何东西:密码,证书,硬件令牌,虹膜扫描,DNA。它们是允许访问系统的密钥。如果您的问题是关于验证使用钥匙的人的身份,唯一的诚实答案可能是您必须在同一房间。在所有其他情况下,我认为您不能向自己保证鲍勃确实是鲍勃,并且在获得他的通行权时目前并未被扣在枪口。因此,在您的IT基础结构设计计划中,逻辑上不要引用“鲍勃”:一个实体可以访问您的站点。

因为您只能真正知道“一个实体”使用您过去散发的钥匙进行了访问,所以正确的观点可能是限制钥匙可以打开的门数。发出的键越多,打开的门就越少。

OpenVPN还可以选择每个密钥仅允许一个并发连接。然后,如果在鲍勃已经在里面的情况下爱丽丝确实使用鲍勃的钥匙登录,则爱丽丝将被拒绝访问。不幸的是,这也意味着当用Bob的密钥登录Alice时,Bob无法登录。因此,您应该配置系统以通知您来自多个源IP的并发登录尝试。并在发生任何违规时将两者同时踢开,这样鲍勃将不得不拨打电话寻求帮助。

重点是:不要向自己保证无法确定的事情,在设计安全计划时请牢记这一点。假设总是有一个更聪明的人在你前面,他们迫不及待地想证明你错了……只是为了“笨蛋”。:-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.