我想托管一个网站,该网站应该侦听子域(例如sub.domain.com)以及多个生活在IIS和SSL二级域名(例如domain2.com,domain3.com)之下的网站。
对于具有子域的网站,我具有通配符证书(* .domain.com),并且我还具有专门针对其他站点(domain2.com和domain3.com)的证书。
可以在相同的IIS上托管这样的设置吗(如果重要的话,可以使用Azure Cloud Service Web角色)吗?
问题恰好是titobf 在这里解释的:理论上,为此,我们需要使用SNI进行绑定,并为domain2 / 3.com指定主机,然后为* .domain.com指定具有* host的通用网站。但是在实践中,无论是否设置了绑定,如果所有网站都在该网站上,它也会收到对domain2 / 3.com的所有请求(尽管据称仅是在万不得已的情况下才进行匹配)。
任何帮助,将不胜感激。
仍未解决
不幸的是,我无法解决这个问题:它似乎只能以极其复杂的方式解决,例如创建一个位于IIS和Internet之间的软件(基本上就是防火墙)并修改传入的请求(在SSL握手之前!)。 )以允许出现这种情况。我非常有信心,无论如何,IIS都不可能做到这一点,即使是从本机模块也是如此。
我必须澄清:我们使用Azure云服务,因此还有一个限制,即我们不能使用多个IP地址(请参阅:http : //feedback.azure.com/forums/169386-cloud-services-web-and -workerrole / suggestions / 1259311-multiple-ssl-and-domains-to-one-app)。如果您可以将多个IP指向服务器,则不会出现此问题,因为您也可以为IP创建绑定,并且这些绑定可以一起使用通配符绑定。更具体地说,您需要为通配符站点提供一个IP(但是由于您现在拥有一个单独的IP,因此您不必配置通配符主机名绑定),并且为所有其他非通配符提供一个IP。
实际上,我们的解决方法是使用非标准SSL端口8443。因此,SNI绑定实际上绑定到了此端口,因此它可以与其他绑定一起使用。不好,但是对我们来说是一个可以接受的解决方法,直到您可以将多个IP用作Web角色。
现在无法使用的绑定
第一个https绑定是具有简单证书的SNI,第二个不是具有通配符证书的SNI。
http站点以及SNI https站点都可以使用,但是带有通配符绑定的站点提供了“ HTTP错误503。服务不可用”。(没有任何更多信息,没有失败的请求跟踪或事件日志条目)。
终于让它基本工作了
启用ETW跟踪日志(如Tobias所述)表明,根错误如下:
由于以下原因,请求(请求ID 0xF500000080000008)被拒绝:UrlGroupLookupFailed。
据我了解,这意味着http.sys无法将请求路由到任何可用的端点。
通过检查已注册的端点,netsh http show urlacl
发现确实为端口443注册了一些东西:
Reserved URL : https://IP:443/
User: NT AUTHORITY\NETWORK SERVICE
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;NS)
netsh http delete urlacl url=https://IP:443/
最终通过启用SSL绑定将其删除。
logman start httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl -ets
2)执行503请求3)停止跟踪日志。运行:logman stop httptrace -ets
4)将跟踪日志写入文件。运行:tracerpt.exe httptrace.etl -of XML -o httptrace.xml
5)检查xml文件中503的原因,并将其发布在此处。