2009-11-22 25 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。

我們的理解是這樣可以防止重複這個錯誤。