使用无密码 OpenVPN 客户端密钥的优缺点

使用无密码 OpenVPN 客户端密钥的优缺点

我正在为我的组织设置 OpenVPN 服务器,并且正在阅读客户端密钥的不同工作方式。我仍然不太熟悉这些客户端密钥和帐户身份验证背后的所有概念。

  1. 使用 ./build-key-pass 与 ./build-key 生成客户端密钥相比,真正的好处是什么?这是否类似于使用密码保护 SSH 密钥?并非所有需要帐户的员工都精通技术,因此是否值得引入另一个设置步骤?
  2. 我现在看到,使用客户端密钥时,有一个选项不需要典型的用户名/密码身份验证。我的计划是在服务器上为每个客户端执行一次用户添加。如果我不使用用户密码身份验证设置,那么我将如何撤销对特定客户端的访问权限?
  3. 我如何才能安全地将这些客户端证书发送给所有需要帐户的员工?我相信 client.key 文件应该是私密的,通过电子邮件发送这些文件似乎不安全。

答案1

针对你提出的每一点做出回应:

1 - 您正确地将 OpenVPN 密钥的密码保护类比为 SSH 密钥的密码保护。

2 - 不使用任何其他身份验证方法,OpenVPN 仅依靠服务器对客户端证书的验证(理想情况下,客户端对服务器证书的验证)来对客户端进行身份验证。这使得撤销单个客户端的访问权限只需将客户端的证书添加到证书撤销列表 (CRL)(OpenVPN 1.5 及更高版本支持)或从客户端中删除密钥材料(或切换所有其他客户端上的证书)。如果您不使用其他身份验证方法,则需要有 CRL 来允许撤销客户端访问权限。

请记住,使用密码保护密钥对额外身份验证没有任何帮助。该密码只是“解锁”客户端设备上的密钥 - 它不会缓解客户端用户向服务器计算机进行额外身份验证的问题(以及访问撤销问题)。

3 - 您应该在客户端上生成私钥/公钥对,而不是通过网络传输它们。您可以在客户端上生成证书请求,将公钥(在证书签名请求中)发送给您的 CA 进行签名,然后在客户端上安装签名的证书。这一切都可以编写脚本,我相信有人已经这样做了(我希望商业许可的 OpenVPN 产品可能内置了一些这样的功能)。

我发现这个我的证书向导该项目就是为此目的而编写的,但我会使用 OpenSSL 命令行工具在客户端上编写整个脚本,以尝试使整个过程对用户来说几乎不可见。

相关内容