上下文
我需要在Windows Server 2008上将IIS应用程序服务器(http端口8080,https 8181)放在IIS 7.5(http端口80,https 443)之后。
步骤
我已使用IIS ARR
模块启用Proxy,以便将一些请求路由到Java应用程序服务器。我还为此目的创建了一些URL Rewrite
规则。使用http
,一切正常。
使用的规则规定,当请求的URL与模式(MyAppContextRoot.+)
匹配时,要采取的操作是重写:http://localhost:8080/{R:0}
。
对于使用https的其他应用程序,重写规则为:https://localhost:8181/{R:0}
。
为了路由https请求,我已经读过一些需要在IIS和Java之间共享相同证书的地方,因为IIS会加密/解密请求/答案。如果我错了,请纠正我。
由于我还处于开发阶段,我决定分享自签名证书。我使用SelfSSL7
创建了它,并使用keystore
导入了java keytool
:
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.com
和https://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.
但是,查看证书时,存在以下差异:发布,发布,有效性,签名算法,密钥大小。特别是,SelfSSL7创建的算法是sha1RSA(1024位密钥),keytool创建的算法是sha256RSA(2048位密钥)。
答案 0 :(得分:3)
听起来你正在尝试做的是反向代理设置,而不是重定向到Java服务器,在这种情况下,永远不应该直接访问Java服务器,而只能通过IIS访问。因此它对客户来说是“不可见的”(因此您甚至不应该看到具有不同端口的不同URL)。听起来你的重写规则只是重定向(而不是反向代理重写规则)。
如果您不需要使用SSL / TLS(仅从外部客户端到IIS的连接)保护IIS和Java容器之间的连接,则无需为SSL配置Java容器/ TLS。 IIS将使用纯HTTP作为Java容器的客户端。
如果希望使用SSL / TLS保护IIS和Java容器之间的连接,则需要该证书对托管Java容器的主机有效,如IIS所示。这不太可能与IIS上使用的证书相同,因为IIS使用的证书是面向公众的证书,而Java容器的证书只能供内部使用(您可能使用自签名证书)或者您自己的CA,具体取决于IIS反向代理模块可以配置为接受的内容。