多个 SSL 证书用于访问 IIS 中的一个 ASP.NET 应用程序

多个 SSL 证书用于访问 IIS 中的一个 ASP.NET 应用程序

我有一个 ASP.NET 应用程序,目前可通过单个域名访问,并带有 SSL 证书。我们希望能够通过第二个域名访问同一个应用程序。非 SSL 部分很简单,只需在 IIS 中为网站设置第二个主机标头值即可。我们知道我们需要第二个域名的第二个 SSL 证书,当然还需要第二个 IP 地址来并行运行这两个证书 - 这些都不是问题。

问题是 IIS 似乎不允许您设置一个具有两个 SSL 证书的网站 - 似乎您可以将一个网站绑定到两个 SSL 条目,前提是每个条目都有自己的 IP,但只能使用相同的证书。

我们不想在 IIS 中拥有第二个网站条目,因为这意味着运行 ASP.NET 应用程序的完整第二份副本 - 即内存使用量翻倍。这两个域名基本上是特定国家/地区的变体,因此我们不能使用带有来自通用域名的子域名的通配符证书。

有什么办法吗?是否可以将 IIS 配置为在一个网站条目上提供两个 SSL 证书(当然是基于 IP 地址)?或者实现此目的的最佳方法是在 IIS 中设置第二个网站,该网站将反向代理到“真实”网站上?

答案1

由于 SSL 协议和虚拟主机的工作方式,您的问题无法解决。每个 IP 只能使用一个证书,无论它服务的基于名称的虚拟主机数量有多少。

正如 Brian 所建议的,您可以在该单个证书上放置几个备用虚拟主机名(使用主题替代名称x.509 扩展-参见https://www.rfc-editor.org/rfc/rfc3280#section-4.2.1.7),但它仍然只是一个证书。访问您其中一个虚拟主机的访问者只需分析证书扩展即可确定所有其他虚拟主机。

这个限制是由于 HTTPS 协议的组织方式造成的 - 它只是在 SSL 之上堆叠的 HTTP。

因此,当客户端连接到服务器时,它首先必须建立 SSL 会话 - 这是服务器提供证书的阶段。

在这个阶段,服务器不知道客户端会请求什么虚拟主机,因为客户端将在稍后建立 SSL 会话后才会这样做。

只有在 SSL 会话建立后,客户端才会通过发送 HTTP 客户端标头来启动 HTTP 对话,其中包括“Host:”标头,指示客户端请求的网站主机地址。这是在服务器证书发送给客户端很久之后。

答案2

您可以将备用名称放在 SSL 证书的“主题备用名称 (SAN)”属性中,而不是使用通配符证书。您将配置 IIS 以对两个绑定使用相同的证书。

希望这有帮助,-brian

答案3

刺向黑暗,但如果你运行 2 个 IIS 网站,在单个 AppPool 下运行它们是否可以降低内存成本?

答案4

您可以在应用程序前面运行反向代理(例如使用 nginx)。反向代理将为您处理这两个证书。

反向代理将使用各自的证书监听 https :// fqdn1/ 和 https :// fqdn2/,并代理 http :// localhost/application/ 或其他任何内容。

高血压

布拉姆

相关内容