2009-11-22 24 views
3

我们正在尝试设置具有多个证书的HTTPS。我们取得了一些有限的成功,但我们得到了一些我无法理解的结果...软件NLB'd IIS7集群上的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显示的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. 我该如何解决这个问题,以便我们在双方都能得到相同的行为?

回答

4

我最终跟踪了这个问题。将此作为暗示落入同一陷阱的其他人提示...

该问题是由我们在我们的IIS服务器上使用共享配置模型引起的。设置HTTPS绑定时,这似乎只是实际绑定在您管理它的盒子上(离开另一个完全解除绑定)。由于我们的*绑定依然存在,因此它会在我们没有通过UI执行的服务器上捕获它,只是让我们拿起共享配置。

疯狂的单亲性NLB运气不好让我们沿着花园的路径走下去,原因是路由器让我们的内部请求到达一个服务器,并且我们的外部请求到达另一个服务器。

我们最终通过在两台服务器上运行“netsh http show sslcert> certs.txt”来区分输出结果。

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

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

我们的理解是这样可以防止重复这个错误。