我已经配置了一个可运行的 openvpn 服务器(ubuntu 10.04)和客户端,没有问题。
我为客户端机器生成了证书和密钥文件等。
我们部署了许多此类通用客户端计算机来捕获数据,每月部署 10 到 20 台。使用 VPN 的目的是让我们能够远程登录以进行偶尔的支持和监控。他们通过其他方式(而不是 VPN)将数据发送回家
我正在考虑使客户端配置文件通用并在所有部署的机器上使用它们(服务器端的“duplicate-cn”选项)。
我的理由是这样的:
- VPN 服务器明确禁止从我们办公室以外的任何地方进行 ssh 登录,因此连接的客户端无法通过 ssh 进入服务器
- 此外,登录 openvpn 服务器需要 X509 .pem 密钥文件(它是 Amazon EC2 实例)
- 服务器不允许客户端互相看到(“客户端到客户端”被注释掉),并且无法访问任何其他网络,这纯粹是为了我们可以 ssh 进入客户端。
- 我们很懒,不想让管理员生成证书并将它们应用到机器上(因此不再是通用的,不再是热插拔的等等),否则人们会感到困惑并犯错。
主要缺点似乎是:
- 在存在许多连接的情况下很难分辨哪台机器是哪台机器(我还没有找到解决方案)
客户端机器安装在“不受信任”的站点上,也就是说,我无法保证它们的物理安全。
所以我的问题是... 在这种情况下可能发生的最坏情况是什么?如果一台机器直接受到攻击,它能做的最坏的事情就是打开一个 VPN 隧道(它无论如何都会自动打开!)但除此之外就无能为力了。一旦检测到,我们就可以在防火墙级别阻止该 IP。
我的思维过程正确吗?或者我遗漏了什么?
编辑:
我可能应该说,客户端机器是无头的(没有视频/键盘),并且不能由客户端站点直接访问(尽管您不能完全保证这一点!)。这是一个机器对机器 (M2M) 环境。这些不是(例如)销售人员携带的笔记本电脑。
答案1
不要,不要,不要这样做。您完全违背了基于证书的身份验证的所有目的。
你所做的会破坏可识别性
如果每个人都拥有相同的密钥对,你就无法区分一台机器和另一台机器。你的做法破坏了安全性。
如果每个人都有相同的密钥对,而私钥被泄露全部你的系统连接受到损害,并且每个人的密钥对需要更改。你所做的再次破坏了安全性。
如果每个人都使用相同的密钥对,你就无法通过撤销证书来撤销单个实体的访问权限。
这现在可能看起来并不重要,但有一天你需要删除某人的访问权限。你能确定他们没有保留私钥的副本吗?(提示:不能 - 所以现在你必须改变每个人的再次按下键。)
安全不应该是方便的,也不适合懒人。如果你想要公钥认证的额外好处,你需要愿意承担正确管理密钥的(轻微的)额外负担。
如果你不想承担额外的工作量,那么按照 DrGkill 的建议去做,只需配置预共享密钥(每方一个 - 通用预共享密钥具有我上面列出的通用证书的所有相同问题......)。
答案2
这是一件坏事,证书是用来识别人的,所以一群人使用一个证书是没有意义的。你可以简单地用预共享密钥配置你的 openvpn 服务器,这样更容易维护。
现在,假设通用私钥被泄露。这意味着您必须撤销它并向所有用户提供新的证书/密钥进行安装。您会让很多人不高兴,从而使您的系统变得低效。此外,您可能不知道是谁丢失了密钥。