我们有一个Web应用程序,可以从一个IIS网站提供大量的网站。 IIS网站只是在端口80上具有全部绑定。到目前为止,对于SSL绑定,我们已经为每个需要SSL的域添加了一个新的IP,并为该特定IP地址添加了一个SSL绑定。
现在我们正在调查集中证书商店。 我们认为我们现在可以有一个全面的SSL绑定,只使用提供的主机名并在CCS中查找证书。 但这似乎并非如此。 您可以添加一个全局SSL绑定,并在本地IIS上安装特定证书,也可以使用CCS添加单个SSL绑定,但必须指定一个主机名。
如果我是正确的,那么这对我们来说是一个棘手的问题。 即使证书本身在CCS中,我们仍然会对每个正在使用的证书进行绑定。 我对么?
编辑:这是一个大规模的租赁应用程序。 大约有一百个客户端,有数千个独特的主机名,全部运行在同一个Web应用程序上; 应用程序使用数据库来确定为每个主机名显示的内容。
为每个用于访问应用程序的主机名分别绑定是一个完全不起动的程序。 并且保持在本地IIS实例中加载的SSL证书也是非启动器; 我们一直这样pipe理它,直到现在变得笨拙。
在港口80,我可以有一个全面的约束力; 任何用于连接的主机名都将被定向到Web应用程序。
在端口443,显然我不能这样做,除非证书加载在IIS实例,而不是CCS。 每个IP地址只能使用一个通配符证书。 我不能让它使用SNI传递的主机名来查找正确的证书; 传递的主机名必须首先匹配一个绑定。
理想情况是,如果我可以在端口443上进行全面绑定,它会根据传递的主机名自动查找正确的证书。 似乎IIS并不想让我这样做。
这是非常令人沮丧的。 看起来我们将不得不为此放弃IIS,并将所有SSL卸载到基于Apache的东西上,这似乎更加灵活。
在IIS 10中,您可以拥有:
Name Bindings ---- -------- Default Web Site https *:443:*.bar.com sslFlags=3 https *:443:*.bar.net sslFlags=3 https *:443:*.foo.edu sslFlags=3
并使用CCS的所有绑定,但你不能这样做:
https *:443:*.*.com sslFlags=3
要么
https *:443:*.com sslFlags=3
因此,如果您的所有域名都是不同的顶级域名,这并不是很有帮助,但是如果您拥有像username.domain.com的域名,并且所有主机username.domain.com的域名都是相同的,那么这将非常有帮助。
你在这里谈论两个不同的概念:
SNI,基于主机名使用TLS(SSL已经死亡)的能力,所以你不需要为每个TLS站点分开的IP地址。
中央证书存储区,它只是改变了IIS存储证书的方式,使得它们更容易部署。 要使用CCS,您需要在绑定中定义主机名,因为它用于查找正确的证书PFX文件。
但是,您可以混合使用,您仍然可以使用存储在旧证书存储区中的证书进行一些绑定,而将CSS用于其他方式。
但是,你不能有一个单一的绑定,并告诉它使用CCS。
提示:在脚本中pipe理绑定和证书分配,绝对不要在IISpipe理器中单击。
在调查了apache和nginx ,我决定使用haproxy-1.5 。 1.5版本整合了我所需要的https支持。 在写好正确的haproxy.cfg来指定负载均衡器节点之后,我所需要做的就是使用openssl将导出的PFX证书文件转换为PEM文件,并将它们转储到文件夹中。 我的catchall绑定将工作得很好。
当然,我仍然有反向代理的常见问题…但没有什么不同,我已经解决了我的ARR平衡器。
这里是我haproxy.cfg的一部分(当然是消毒)
frontend http-in bind *:80 bind *:443 ssl crt /media/windowsshare/myWindowsServer/ssl/pem/ default_backend myCluster backend myCluster server member1 10.4.0.184:80 maxconn 64 server member2 10.4.0.185:80 maxconn 64