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

我为我的组织build立了一个OpenVPN服务器,并且正在阅读客户端密钥工作的不同方式。 我对这些客户端密钥和帐户authentication背后的所有概念还是有点陌生​​。

  1. 使用./build-key-pass和./build-key生成客户端密钥有什么好处? 这与保护SSH密码的密码类似吗? 并不是所有的员工都需要技术支持,所以值得引入另外一个设置步骤?
  2. 我现在看到,使用客户端密钥时,有一个选项不需要典型的用户名/密码authentication。 我的计划是为每个客户端在服务器上做一个useradd。 如果我不使用用户身份validation设置,那么我将如何撤消对特定客户端的访问?
  3. 我怎样才能将这些客户证书安全地交付给我们所有需要账户的员工? 我相信client.key文件应该是私人的,发送电子邮件似乎是不安全的。

回应你的每一点:

1 – 将OpenVPN密码的密码保护types化与SSH密码的密码保护是正确的。

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

请记住,保护密钥的密码完全不能帮助您:附加的身份validation。 该密码只是“解锁”客户端设备上的密钥 – 它不能缓解客户端上的用户对服务器计算机的额外身份validation问题(以及访问撤销问题)。

3 – 您应该在客户端自己生成私钥/公钥对,而不是通过networking传输它们。 您可以在客户端上生成证书请求,将公钥(在证书签名请求中)发送到CA进行签名,并在客户端上安装签名证书。 这可能都是脚本,我敢肯定有人已经做到了(我希望商业许可的OpenVPN产品可能有一些内置的function)。

我发现这个My Certificate Wizard项目就是为了这个目的而编写的,但是我会使用OpenSSL命令行工具在客户端上编写整个脚本,试图让整个过程对用户来说基本不可见。