将多个 HTTPS 域指向同一个 Web 服务器

信息安全 tls 证书 网页浏览器 网络服务器
2021-08-31 19:46:24

我们目前正在通过 HTTPS(abc.net)运行 SaaS,我们的一个客户(xyz.com)想要做一些自定义品牌。客户端 xyz.com 将拥有自己的子域 xyz.abc.net,从 Web 浏览器查看时,该子域看起来像是 xyz.com 的一部分。

客户端会将 CNAME 记录添加到其 DNS 中,以便向 xyz.com 发出的 HTTP(S) 请求将被路由到 xyz.abc.net。

由于 xyz.com 和 *.abc.net 都已验证证书,因此上述内容理论上应该有效。

但是,当普通用户访问 xyz.com 时,地址栏中会显示什么证书?如果用户看到的是 *.abc.net 而不是 xyz.com 的证书,有什么办法可以改变它吗?

由于 *.abc.net 的证书已经存在,因此客户无法为其子域获取新证书。

我已经找到了这个,但它似乎与上述问题有点不同。客户端也不想代理(这需要他们运行服务器)。

1个回答

那里没有魔法:用户将看到 Web 服务器发送的内容,而 Web 服务器将发送您告诉它发送的内容。

您说两个 URL 将使用 DNS CNAME 条目共享相同的 IP,因此您会遇到不同的行为,具体取决于浏览器是否支持SNI所有最近的浏览器都支持 SNI,并允许它们在 SSL 握手的早期阶段指示服务器名称,从而允许 Web 服务器选择正确的证书以显示给客户端。

  • 使用支持 SNI 的浏览器,您只需根据服务器名称配置不同的虚拟主机(或等效的,取决于您的 Web 服务器),每个虚拟主机都引用自己的证书,但很可能共享相同的文档根目录和其他属性。
  • 如果您想支持较旧的浏览器,当收到来自此类浏览器的请求时,未收到服务器名称的 Web 服务器将始终选择默认虚拟主机并使用其中包含的配置。
    如果您希望完全干净并为这些客户端显示正确的证书,那么您将需要为每个服务器名称使用不同的 IP。否则,将由您(他们,您的客户)决定您在多大程度上容忍使用旧浏览器的客户的服务优雅降级(这些客户在任何情况下都可以访问该网站:较旧 - 因此通过定义不安全 - 浏览器会出现安全警告,提及来自其他域的证书或专门生成的默认证书,具体取决于您的配置和选择)。