如何为客户端生成密钥并保证 ca.key 安全

如何为客户端生成密钥并保证 ca.key 安全

我正在为 10 到 100 名外籍人士设置一个小型 VPN 服务,以便他们可以访问通常被屏蔽的网站。我希望他们能够通过我的网站注册,付款后,网站将生成他们的 client.cert、client.key 和 client.conf,可能还有 tp.key,并将以某种安全(尚未确定)的方式交付。

问题是,要生成这些密钥,我需要手头有 ca.crt 和 ca.key。ca.key 应该离线保存在超安全的位置。将它保存在我的网络服务器上似乎是自找麻烦。由于其他大型 VPN 提供商似乎能够立即生成密钥,他们是如何做到这一点的,同时将密钥保存在安全的地方——或者他们不是吗?

最后,我想我应该将 openvpn 服务器和注册网站放在不同的服务器上 - 有必要吗?

答案1

我管理了相当多的 PKI 服务,所以这是一个常见的难题。

只要有可能,我们就会将 CA 密钥存储在独立机器上。这台机器位于我们公司网络内部,并且托管有限的服务(如果有的话)。请求和签名过程通过简单的协议和一些手动按钮相互抽象。随着时间的推移,我们使用的解决方案分为两大阵营:

  • 一些简单的事情,例如 HTTPS POST 将 CSR 发送到内部资源,提示输入密码并返回 CRT 数据。

  • 定制的、略微复杂的单向 API,用于拉取请求并推回证书。它实际上由三个系统组成,每个系统分解为执行 PKI 生命周期的特定部分 - 最终用户收集点、许可证管理和签名。

坦白说,除非你有很多时间或有很好的商业案例,否则我不建议遵循后者。你可以复制类似第一种的做法。或者,沃姆布尔说,您可能会发现您的范围甚至不能保证这一点;如果您对您的网络服务有信心,并认为损害不会蔓延太远。

损害不会蔓延得那么远的一个原因是,您当前的计划包括自己创建客户端私钥。这意味着,如果 Web 服务器受到攻击,即使没有 CA 密钥,有人也可以访问有效的客户端证书和相关私钥,从而访问您的服务。这可能先于确保 CA 的安全。理想情况下,客户端应该创建自己的私钥并对其负责。

答案2

我暗自怀疑,提供“即时” SSL 证书的大型 CA 可能要么依赖 24x7 低薪支持人员,要么(更有可能)只是将 CA 密钥放在连接性极其有限的机器上,并且只允许使用非常简单的协议来请求证书生成。

鉴于您生成仅对您的站点有效的证书,并且如果发生最坏的情况,您需要重新颁发的证书数量相对较少,如果您对 Web 服务器的安全性不太确定,我倾向于将 CA 密钥留在 Web 服务器上(如果您非常有信心您的系统安全性很强)或者拥有第二台安全性良好的机器(除了 SSH 之外没有运行任何其他服务来向 Web 服务器提供密钥签名命令)。

相关内容