我的公司在 AWS 上有一个正在运行的业务 Web 服务,它使用通配符 SSL 证书(适用于 *.example.com)。多个合作伙伴有子域并需要 SSL(https: //partner1.example.com、https ://partner2.example.com等),我们为它们提供 HTML 或 JSON 响应。
我们的生产站点有一个面向 Web 的 ELB,它安装了我们的 SSL 证书。ELB 平衡并终止 SSL到我们 VPC 中的生产服务器实例集群。我们的网络应用知道如何根据子域名提供正确的合作伙伴 HTML/JSON。
我想尽可能简单地为我们的测试环境(例如 QA、Staging、Demo)复制它。但是测试环境和生产环境不能是同一个服务器实例;我需要知道,如果我搞砸了我们的测试环境,我不会终止生产。
理想情况下,处理生产流量的同一个 ELB 可以以某种方式将流量路由到我的测试服务器,也许如果它们使用已知的 IP 地址或 DNS 子域?我说这是不可能的吗?
我想我可以为每个测试环境设置一个带有 SSL 证书的 ELB,每个测试环境都“平衡”到一台服务器,但这似乎过于复杂,而且我猜也很昂贵。
所有实例、生产和测试都在我们的 VPC 中运行。但目前只有生产集群在 ELB 上设置了 SSL(终止 SSL)并将直接的 HTTP 请求传递给实例本身。
测试服务器接受 HTTP。我设置了公共弹性 IP 和 DNS 名称(staging.example.com、qa.example.com、demo.example.com)……但它们不受 SSL 保护。
测试服务器实例上几乎没有关键或客户数据,并且它们像任何面向 Web 的服务器一样受到保护和正确修补(我希望!!)。不过,我希望 SSL 不仅可以提高安全性,还可以让我的测试环境尽可能地与我的生产环境相匹配。
除了我们的登台服务器之外,其他环境都由具有 Apache 命名虚拟主机配置的单个实例(例如 demo 和 qa 都在同一台服务器上)支持。因此,对于测试,有很多站点,但只有少数服务器。
有没有一种方法可以让我的通配符 SSL 证书只安装在我的负载均衡器(或者可能是一个)上,或者其他一些允许我检测并将 HTTP 请求路由到正确的测试服务器的配置,基于 IP 或域名(甚至是 HTTP 标头)?
我知道这是一个复杂的问题。我非常了解 AWS、安全性和网络,但我仍在尝试找出 VPC 环境中的路由甚至内部 DNS,因此可能不知道我的选择。
诚实地?我会说你想多了。只需使用多个 ELB 并将 *.example.com 证书放在所有这些 ELB 上即可。这并不是真正的成本高昂。在您的整个堆栈中,ELB 可能是最便宜的组件之一。这还允许您从相同的CloudFormation 模板或供应系统启动堆栈。您可以根据需要在任意数量的 ELB 上使用该证书。
我们遇到了与您的问题非常相似的问题,因此决定完全按照我上面的描述进行操作。我们最终省了钱,因为 ELB 并不是我们每月成本的重要预测指标,而且即使有可能,也需要花费更多的时间来破解解决方案。使用 ELB,您只需为您使用的流量付费,因此 QA 和演示环境不会接近生产负载的成本。在该链接中描述的示例中,一个月 100GB 的流量为 18 美元。这就像三杯星巴克咖啡。
一个额外的好处:它也更容易调试。无需担心奇怪的交易规则等。