ssl - 通常如何实现需要 TLS 的临时服务器?

标签 ssl server lets-encrypt

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

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

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

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

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

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

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

最佳答案

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

最简单的方法是购买一个通配符证书,即写有 *.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 的证书,您现在可以将此证书(以及随附的私钥)用于具有任何被旋转起来的名字。这种做事方式在安全方面并不理想,但您说您不太关心这一点。

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

关于ssl - 通常如何实现需要 TLS 的临时服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41660041/

相关文章:

mysql安装ubuntu服务器: Could not open 'abstractions/mysql'

windows - ejabberd模块编译错误

azure - 如何为 Service Fabric 配置 Let's Encrypt 证书?

javascript - 当 AJAX 请求到具有无效证书的服务器时如何抑制 SSL 错误

docker - 如何解决 Dockerized 反向代理后面的 LetsEncrypt/Certbot 404?

node.js - 如何在端口 80 上部署第二台服务器(听 EADDRINUSE:::80)

ubuntu - 子域的通配符证书?

ssl - 为什么 letsencrypt 显示错误?

iOS:自签名证书有问题。 SSL 握手错误 (-9824)

asp.net - IIS Express 自签名证书不受信任