通常如何实施需要 TLS 的临时服务器?

How are ad-hoc servers requiring TLS usually implemented?

我有一个主服务器,为 https://www.example.com 的所有传入流量提供服务。主服务器为客户端分配一个辅助服务器以建立持久的安全 WebSocket 连接。

这些辅助服务器可以临时启动和停止(取决于现有辅助服务器的拥挤程度),并且它们将在启动时获得一个新的 public IP 地址(可能使用AWS 或类似 Linode 的云托管服务)。启动时,辅助服务器将与主服务器进行身份验证,并告诉主服务器其 public IP 地址(以便主服务器可以通知传入的客户端)。

要使用安全的 WebSocket (wss://) 连接,我需要获得该服务器的证书,这可能意味着我需要为每个辅助服务器提供一个子域名。但是域名在互联网上传播需要相当长的时间,所以我无法立即启动和使用服务器。

除非我只使用 IP 地址获得证书(这意味着我的辅助服务器将没有域名)。这似乎不太安全,因为云托管服务在服务器关闭时不会保留固定的 IP 地址。

对于我的证书颁发机构,我使用 Let's Encrypt 因为我是 运行 一个在线游戏,其中通过 WebSocket 连接的数据并不是很敏感。

整个事情似乎太复杂了,不是在我的服务器上设置 TLS 的正确方法。

这应该如何正确完成?有没有办法只启动一个辅助服务器实例,并让它自动设置 TLS?或者我应该忘记这一切而不对辅助服务器使用 TLS?

首先,名称 "Propagation" 不是真实的,或者更确切地说,它只是一个粗略地基于有关 DNS 缓存的事实的传说。如果你认真对待这个游戏,实时启动服务器并拆除它们,你最终将需要学习(或需要雇用知道的人)这方面的知识。如果您认为 "propagation" 需要数小时甚至数天,那是因为使用了便宜的 web-hosting,它懒得提供更好的服务,因为它怀疑您是否知道其中的区别。

最简单的方法是购买通配符证书,即带有 *.example.com 并适用于任何名为 anything.example.com 的服务器(尽管没有额外的点,请注意,它不适用于 something.subdomain.example.com 因为额外的点)。 Let's Encrypt 不提供通配符,但是,如果您只需要一个通配符来 运行 您的整个服务,它们并不会非常昂贵。

另一方面,如果您做事便宜,可以使用 Let's Encrypt 的 DNS-01 验证方法,让您在知道服务器地址之前为一组服务器名称颁发证书。因此,也许您使用此验证来获取列出 server01.example.com、server02.example.com 等直到 server40.example.com 的证书,您现在可以使用此证书(以及随附的私有key) 用于任何具有任何这些名称的机器。这种做事方式并不理想security-wise,但你说你不太关心那个。

使用 DNS-01 方法意味着您不需要在颁发证书时让服务器实际工作,只需控制它们的 DNS 记录即可。你需要提前计算出你可能需要的服务器的大致数量,但坦率地说,如果你正在构建一个游戏,不确定它是否会有 5 个玩家或 500 万玩家,那么你最糟糕的问题很可能不会使用 TLS。