2012-05-31 86 views
0

語境Java密鑰

我需要把Java應用程序服務器(HTTP端口8080,HTTPS 8181)背後IIS 7.5(http端口80,HTTPS 443)在Windows Server 2008上

步驟

我已使用IIS ARR模塊啓用代理,以便將某些請求路由到Java應用程序服務器。我也爲此目的創建了一些URL Rewrite規則。使用http,一切工作正常。

使用的規則規定,當請求的URL匹配(MyAppContextRoot.+)模式時,要採取的操作是Rewrite:http://localhost:8080/{R:0}

對於使用https另一個應用程序,重寫規則是:https://localhost:8181/{R:0}

爲了路由HTTPS請求,我讀的地方,我需要共享IIS和Java之間的相同的證書,因爲IIS加密/解密的請求/應答。糾正我,如果我錯了。

由於我還處於發展階段,我決定分享自簽名證書。我曾與SelfSSL7創建它,我一直在使用keytool導入的Java keystore

selfSSL7 /Q /T /I "Default web site" /N cn=myDomain.com /X /F MyCertificate.pfx /W myPassword 

keytool -importkeystore -srckeystore C:\myPath\MyCertificate.pfx -srcstoretype pkcs12 -srcalias my -deststoretype jks -deststorepass myPassword -destalias MyAlias 

問題

兩個證書做他們的工作:https://myDomain.comhttps://myDomain.com:8181被啓動和運行,而是試圖路由時,我得到的錯誤:

502 - Web server received an invalid response while acting as a gateway or proxy server. 

There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy) contacted the upstream content server, it received an invalid response from the content server. 

看着證書,但是,有差異在:I ssued,簽名,有效性,簽名算法,密鑰大小。特別是,由SelfSSL7創建的算法的算法是sha1RSA(1024位密鑰),而由keytool創建的算法是sha256RSA(2048位密鑰)。

+0

'keytool -importkeystore'只會複製證書(和私鑰)。如果作爲客戶端連接時證書詳細信息有所不同,那麼您可能沒有使用您認爲的證書配置服務器。 – Bruno

回答

3

這聽起來像你試圖做的是一個反向代理設置,而不是重定向到Java服務器,在這種情況下,Java服務器不應該直接訪問,但只能通過IIS。因此它對客戶端是「不可見的」(所以你甚至不應該看到不同的端口有不同的URL)。這聽起來像你的重寫規則只是重定向(而不是反向代理重寫規則)。

  • 如果您不需要IIS和您的Java容器之間的連接使用SSL/TLS(只能從外部客戶端IIS連接)的保護,你不需要配置Java容器SSL/TLS。 IIS將成爲您的Java容器的客戶端,使用普通的HTTP。

  • 如果希望IIS和Java容器之間的連接受SSL/TLS保護,則需要證書對於託管Java容器的主機有效,如IIS所示。這不太可能與IIS上使用的證書相同,因爲IIS使用的是公共證書,而Java容器只能用於內部使用(您可以使用自簽名證書或您自己的CA,具體取決於IIS反向代理模塊可以配置爲接受的內容)。

+0

我不需要兩臺服務器之間的SSL:它們確實在同一臺物理機器上。正如您所指出的,我希望Java服務器對客戶端不可見(實質上隱藏端口)。我已經看到啓用代理達到了這個目標。我將使用重寫規則更新我的問題 – perissf

+0

在這兩種情況下,使代理規則都爲普通的「http://」。 – Bruno

+0

謝謝@布魯諾,它的工作原理! – perissf