首先,我不负责服务器。我的雇主是日本人,但我的经理会说英语,他希望我们研究他们正在考虑的设置的可能性。
因此,他是这样解释的:他们有一台机器连接到互联网。该机器上有四台虚拟机(Windows 2008 服务器)。他们想知道主机上托管的 SSL 证书是否可以由四台虚拟机使用。我不确定他们是如何设想这个设置的,但据我所知,每台虚拟机都应该有一个单独的 SSL 证书。
我只是想知道这是否可行或者是否有可以实现这样的设置(4 台机器 1 SSL)的解决方案。
答案1
我认为您需要更好地了解 SSL 的用途及其工作原理。
SSL 实现了多项安全功能,其中以下功能对您来说很重要:
- 传输中的数据加密。
- 对连接的一端或两端进行身份验证。
(还有其他功能,如压缩或安全密钥协商,但您并不真正关心这些)。
给你带来麻烦的是第二部分:身份验证。更具体地说,是服务器端的身份验证(换句话说,客户端如何证明他正在与“正确的”服务器对话)。
为此,SSL 依赖于两个因素:X509 证书和DNS系统。它通过以下步骤实现:
- 它使用用户或应用程序提供的主机名(例如www.mysecureservice.com)通过客户端的DNS解析获取IP地址。
- 它打开与该服务器的 TCP 连接并请求远程机器的 X509 证书(实际上,通常会提供多个证书,但为了简单起见,我们假设只有一个)。
- 它验证证书的真实性。为此,它使用自己的内部规则(由于现在它不太重要,而且相当复杂,我不会详细说明具体如何操作)。
- 它验证从服务器收到的 X509 证书中的名称是否与步骤 1 中用于查找 IP 地址的主机名相同。
如果主机名不匹配,则 SSL 连接将无法验证。根据使用该连接的软件,它可能触发简单的安全警告或导致连接完全失败。
您应该了解的另一种机制是,建立 SSL 连接会消耗大量的 CPU 和带宽,因此 SSL 连接通常会保持相当长的时间。此外,客户端和服务器之间存在“强绑定”,这使得客户端在建立 SSL 连接后几乎不可能更改服务器,除非完全断开连接并从头开始重新启动。对于有状态协议来说,这实际上不是问题,因为无论如何都必须在服务器上维护更多状态元素,但对于无状态协议(如 HTTP),这意味着建立 SSL 连接可能会破坏负载平衡。
现在,直接回答你的问题。
首先:您无法在主机和客户操作系统之间“共享”X509 证书,因为该证书是直接“安装”在机器上的。但是,从技术上讲,您可以执行以下任何操作:
- 在所有虚拟机上安装相同的证书(具有相同的主机名),然后使用 DNS 循环或任何其他类型的网络负载平衡将用户重定向到一台虚拟机或另一台虚拟机。当然,这假设所有虚拟机都是可互换的。
- 在主机上(不推荐)、另一台虚拟机上或主机前面的另一台设备上安装反向代理服务器(最佳解决方案)。该反向代理将接收 SSL 连接、解密并根据您设置的任何规则将查询代理到其中一台虚拟机。但是,这(几乎)仅在您想要通过 SSL 连接提供的是 HTTP 内容并且还要求后端系统与此方案兼容时才有效。
- 在主机上设置所谓的“SSL VPN”(再次强调,不推荐)、另一个客户虚拟机或整个设备前面的某个设备。这种设置更复杂,因为它完全取决于您想要在 SSL 连接中封装什么协议以及您预期的使用场景。
如果这个解释还不够,您能否明确说明您想通过 SSL 封装保护什么?
答案2
如果您有一台额外的机器负责终止 SSL 连接并将这 4 台机器的流量代理到互联网,那么这是可能的。现在请注意,代理和虚拟机之间的流量不会被加密。这称为 SSL 终止代理。
答案3
您的问题有点模糊,因为您没有具体说明想要实现什么。
如果您谈论的是 HTTP,那么在负载平衡设置中这是可能的,其中每个服务器都使用相同的主机名(通过负载平衡器)。这是很常见的,您会在每台服务器上安装相同的证书(请记住,您不能为每台服务器重新颁发证书!)。但是,我真的看不到这里的好处,为什么要在同一台物理机器上虚拟化 4 台机器,然后在它们上平衡流量负载?
您的第二个选择是使用特殊的 SSL 证书,即颁发给 *.yourdomain.com 的“通配符”证书,该证书将被视为对您域的任何子主机有效。它的成本要高得多,而且偏执的人可能认为它不如“固定”SSL 证书那么可靠。我个人将它用于我并不真正关心的内部服务,我只是想摆脱警告。
您可能会对此感兴趣:您可以跨平台重复使用 SSL 证书吗?
请记住,不同的 SSL 证书具有不同的许可模式。有些是“按服务器”,有些是“按域”,或“无限制服务器”。请阅读细则。