2015年8月4日 星期二

[Azure] Java應用程式 強制HTTP轉為HTTPS連線

最近佈署在Azure Java 應用程式的網站,以iframe方式被嵌在客戶網站中,由於客戶網站連線為https,iframe的網站連線也必需是https,否則瀏覽器會封鎖連線。

Enable HTTPS for a web app in Azure App Service中提到,Azure Java 應用程式可以直接將連線由http改為https即可,只是安全性不如使用自訂網域及自己的憑證那麼安全。

由於https與http皆可連線,那有沒有辦法強制把http連線自動轉換成https呢?

答案是可以的。
  • 取得web.config的格式
從同篇文章中的段落 Enforce HTTPS on your web app,取得web.config的設定格式,rule內容不使用,稍後會說明。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect to https">
          ...
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
  • 保留完整URL
有人在stackoverflow中反應 ,使用Enforce HTTPS on your web app裡提供的rule,URL的pathname會不見,所以使用astaykov網友其提供的rule,config檔如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect to https">
          <match url="(.*)"/>
          <conditions>
            <add input="{HTTPS}" pattern="Off"/>
            <add input="{REQUEST_METHOD}" pattern="^get$|^head$"/>
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
  • 上傳web.config
到底web.config檔,要上傳至應用程式ftp佈署的哪個目錄呢? Enforce HTTPS on your web app段落提到要放在root of your application,所以是war解壓後的目錄裡?還是war所在的目錄?搜了半天文章都找不到確切位置,最後,終於在Create Windows Azure Web App with Tomcat 7 and Java 8裡,提到web root bin folder為site\wwwroot\bin,得知原來web root folder為site\wwwroot,將該檔上傳至該目錄,等個1分鐘即可。