软件NLB的IIS7群集上的HTTPS的多个证书

时间:2009-11-22 01:09:19

标签: networking iis-7 https ssl-certificate

我们目前正在尝试使用多个证书设置HTTPS。我们取得了一些有限的成功,但我们得到了一些我无法理解的结果......

基本上我们的NLB上有两台服务器(10.0.51.51和10.0.51.52),两台IP分配给我们的NLB(10.0.51.2和10.0.51.4),我们有IIS使用不同的通配符监听这两台IP证书(为了避免公开IP,让我们说A:443路由到10.0.51.2:443,B:443路由到10.0.51.4:443)。我们还有一个使用端口地址转换的Cisco路由器将端口443从两个外部IP路由到这些内部NLB IP。

奇怪的是,如果我们请求A:443或B:443,这是有效的,但如果你在10.0.51.51:443,10.0.51.52:443,10.0.51.2:443或10.0.51.4:443内部进行你总是得到相同的SSL证书。此证书过去已分配给*:443,但我们已确保在IIS中不再定义*绑定。

当我在删除所有不相关的东西后运行“netsh http show sslcert”时:

IP:port                 : 0.0.0.0:443 
Certificate Hash        : <Removed: Cert 1>

IP:port                 : 10.0.51.2:446 
Certificate Hash        : <Removed: Cert 3 - Another site>

IP:port                 : 10.0.51.3:446 
Certificate Hash        : <Removed: Cert 3 - Another site>

IP:port                 : 10.0.51.4:443 
Certificate Hash        : <Removed: Cert 2>

这告诉我*绑定仍在那里,这有点奇怪,但我不明白为什么会阻止对方工作(或者更奇怪的是为什么通过路由器的请求会起作用)

让我想知道它是否实际上将请求视为机器的IP而不是NLB IP,但不幸的是我们的开发环境只是一个服务器,这可以减少我可以采取的试验/错误的数量(因为所有我可以测试是一个实时环境)而没有说服管理层为测试环境购买更多服务器 - 这是我正在尝试的。

有没有人有任何想法:

  1. 为什么内部和路由器之间存在差异?
  2. 为什么内部请求获得了错误的证书?
  3. 我如何解决这个问题,以便双方都能达到相同的行为?

1 个答案:

答案 0 :(得分:5)

我最终跟踪问题了。将此留作任何落入同一陷阱的人的暗示......

问题是由我们在IIS服务器上使用共享配置模型引起的。设置HTTPS绑定时,这似乎只是实际将其绑定在您正在管理它的框上(让另一个完全未绑定)。由于我们的*绑定仍然存在,它在我们没有通过UI执行的服务器上捕获它,只是让我们选择共享配置。

单一亲和力NLB的疯狂运气通过让我们的内部请求转到一个服务器并将我们的外部请求发送给另一个服务器而将路由器作为原因后将我们送到了花园路径。

我们最终通过在两台服务器上运行“netsh http show sslcert&gt; certs.txt”并对输出进行差异来找到这一点。

继续我们的计划是不再使用IIS UI进行SSL配置,而是按照以下步骤操作:

  1. 在每台服务器上安装证书。
  2. 运行SSL端口的命令行绑定“netsh http add sslcert ipport =?:?certhash =?appid =?” (ip:端口很容易解决,certhash可以从服务器证书页面的“证书哈希”部分复制,appid可以从netsh上的现有IIS绑定中复制http add sslcert)
  3. 直接编辑IIS ApplicationHost.config文件以添加绑定而不涉及UI。
  4. 我们的理解是这可以防止重复此错误。