Azure Web 应用程序未将 https 方案传递给 java Web 应用程序
Azure web app not passing https scheme to java web application
我正在尝试在 tomcat 1.7 上的 Azure java 网络应用程序 运行 上强制执行 https。 (应用程序是使用门户创建的)
我已将以下 web.config 添加到 site/wwwroot 目录。这是通过 https 正确重定向非 http 调用,但在应用程序内部,请求似乎具有 http 而不是 https。
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*"
verb="*" modules="httpPlatformHandler"
resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="%AZURE_TOMCAT7_HOME%\bin\startup.bat">
</httpPlatform>
<rewrite>
<rules>
<rule name="Force HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我认为应用程序显示 http 而不是 https 可能是标准行为,但我当然希望下面的内容呈现为真
HttpServletRequest request
request.isSecure() //this should be true
request.getScheme() //Ideally should be https but is http
我的 web.config 文件中需要添加什么吗?
不确定这是否有很大区别,但我使用的是 CA 签名的通配符证书,我也通过门户网站上传了该证书。这肯定是有效的,因为在我无法在我的网络应用程序上进行 https 调用之前以及在证书上传之后我能够进行调用。
在此先感谢您的帮助。
只是为了回答编辑配置的问题域,有 3 种使用 Java 和 Azure App Service 的方法:
1) 通过门户启用。此方法在上传 war 文件时非常有用,但您无法更改 Web 容器的配置。
2) 从 Marketplace/gallery 部署 Tomcat 或 Jetty。当您执行此操作时,您会在 space 中完整安装 Tomcat 或 Jetty,您可以根据自己的喜好编辑或更改
3) 如果需要,上传包含您自己的 jvm 的自定义应用程序。如果您选择这条路线,则需要牢记 Azure 文档中描述的一些事项。
关于SSL,由于应用服务需要支持大量的框架,因此应用上游支持SSL。您不需要在 Tomcat 中启用 HTTPS 连接器或在本地设置信任库或任何其他有趣的事情。使用此处的信息:http://azure.microsoft.com/en-us/documentation/articles/web-sites-configure-ssl-certificate/ 为您的站点启用 HTTPS。
我正在尝试在 tomcat 1.7 上的 Azure java 网络应用程序 运行 上强制执行 https。 (应用程序是使用门户创建的) 我已将以下 web.config 添加到 site/wwwroot 目录。这是通过 https 正确重定向非 http 调用,但在应用程序内部,请求似乎具有 http 而不是 https。
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*"
verb="*" modules="httpPlatformHandler"
resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="%AZURE_TOMCAT7_HOME%\bin\startup.bat">
</httpPlatform>
<rewrite>
<rules>
<rule name="Force HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我认为应用程序显示 http 而不是 https 可能是标准行为,但我当然希望下面的内容呈现为真
HttpServletRequest request
request.isSecure() //this should be true
request.getScheme() //Ideally should be https but is http
我的 web.config 文件中需要添加什么吗?
不确定这是否有很大区别,但我使用的是 CA 签名的通配符证书,我也通过门户网站上传了该证书。这肯定是有效的,因为在我无法在我的网络应用程序上进行 https 调用之前以及在证书上传之后我能够进行调用。
在此先感谢您的帮助。
只是为了回答编辑配置的问题域,有 3 种使用 Java 和 Azure App Service 的方法:
1) 通过门户启用。此方法在上传 war 文件时非常有用,但您无法更改 Web 容器的配置。
2) 从 Marketplace/gallery 部署 Tomcat 或 Jetty。当您执行此操作时,您会在 space 中完整安装 Tomcat 或 Jetty,您可以根据自己的喜好编辑或更改
3) 如果需要,上传包含您自己的 jvm 的自定义应用程序。如果您选择这条路线,则需要牢记 Azure 文档中描述的一些事项。
关于SSL,由于应用服务需要支持大量的框架,因此应用上游支持SSL。您不需要在 Tomcat 中启用 HTTPS 连接器或在本地设置信任库或任何其他有趣的事情。使用此处的信息:http://azure.microsoft.com/en-us/documentation/articles/web-sites-configure-ssl-certificate/ 为您的站点启用 HTTPS。