我想用 IIS 和 SSL 托管一个可以监听子域(如 sub.domain.com)的网站和多个二级域名下的网站(如 domain2.com、domain3.com)。
对于带有子域的网站,我有一个通配符证书 (*.domain.com),对于其他网站(domain2.com 和 domain3.com),我也有专门的证书。
这样的设置可以托管在同一个 IIS 中吗(如果这很重要,可以托管在 Azure 云服务的 Web 角色中)?
问题就像 titobf 在这里解释的那样:理论上,我们需要使用 SNI 进行绑定,为 domain2/3.com 指定主机,然后为 *.domain.com 指定一个带有 * 主机的通用网站。但在实践中,无论如何设置绑定,如果启用了 catch-all 网站,它也会接收所有指向 domain2/3.com 的请求(尽管据说它只是在万不得已的情况下才匹配)。
如果能得到任何帮助,我们将不胜感激。
仍未解决
不幸的是,我无法解决这个问题:似乎只有通过极其复杂的方法才能解决,比如创建一个软件,位于 IIS 和互联网之间(基本上就是防火墙),并修改传入请求(在 SSL 握手之前!)以允许这种情况。我相当确信,无论如何都不可能在 IIS 上做到这一点,即使是本机模块也不行。
我必须澄清:我们使用的是 Azure 云服务,因此还有一个限制,即我们不能使用多个 IP 地址(参见:http://feedback.azure.com/forums/169386-cloud-services-web-and-worker-role/suggestions/1259311-multiple-ssl-and-domains-to-one-app)。如果您可以将多个 IP 指向服务器,那么就不会有这个问题,因为您也可以为 IP 创建绑定,而且这些绑定可以与通配符绑定一起使用。更具体地说,你需要一个 IP 用于通配符站点(但因为你现在有了一个独立的 IP,所以不必配置通配符主机名绑定),另一个 IP 用于所有其他非通配符站点。
实际上,我们的解决办法是使用非标准 SSL 端口 8443。这样,SNI 绑定实际上就绑定到了这个端口,从而与其他绑定一起工作。这并不好,但在网络角色使用多个 IP 之前,这对我们来说是一个可以接受的解决方法。
现在不工作的绑定
第一个 https 绑定是使用简单证书的 SNI,第二个不是 SNI,而是使用通配符证书。
http 网站和 SNI https 网站都能正常运行,但使用通配符绑定的网站会出现 "HTTP 错误 503。服务不可用。(没有任何进一步信息,也没有失败请求跟踪或事件日志条目)。绑定
终于基本正常工作了
按照 Tobias 的描述启用 ETW 跟踪日志后发现,根本错误如下:
由于以下原因,请求(请求 ID 0xF500000080000008)被拒绝: UrlGroupLookupFailed。
据我所知,这意味着 http.sys 无法将请求路由到任何可用的端点。
使用 netsh http show urlacl 检查已注册的端点后发现,确实有端口 443 已注册:
本文标签: # sni认证
发布评论