2012-09-26 157 views
2

我在Cloud Foundry上部署了一個非常簡單的Grails測試應用程序,該應用程序使用spring-security作爲登錄頁面。在Cloud Foundry上部署需要HTTPS的Grails Web應用程序

我想要求對此登錄頁面進行HTTPS訪問,以便密碼不以明文形式發送。

我做的第一件事就是使用HTTPS瀏覽我的測試應用程序,這很好,因此確認Cloud Foundry可以爲我的應用程序提供HTTPS請求服務。

接下來,我添加了以下到Config.groovy中要求HTTPS訪問我的網頁:

grails.plugins.springsecurity.auth.forceHttps = true 

grails.plugins.springsecurity.secureChannel.definition = [ 
     '/': 'REQUIRES_SECURE_CHANNEL' 
] 

現在,當我嘗試使用grails cf-update它掛在Trying to start application...

如果,如果我刪除的要求部署對於HTTPS它會成功。

我猜測可能是檢查應用程序是否已經啓動有問題。這是否使用HTTP網址,然後重定向到HTTPS,因爲我看不到日誌中的任何問題?

任何想法?

回答

1

我發現目前CloudFoundry + Spring Security存在問題,其中HttpServletRequest.isSecure()在使用https時未返回正確的值。這要求Spring Security在需要安全通道時進行無限重定向循環。

我目睹了一個普通的Spring項目,但這可能是您的Grails項目所遭受的。目前的一種解決方法是包裝您的HttpServletRequests,以便isSecure()查看該方案以決定返回的內容。

如果試圖在瀏覽器中的安全網址,你怎麼弄(假設應用程序實際上已經開始,雖然Grails的插件告訴其他)

+0

我在掛機期間在瀏覽器中嘗試了安全的URL,很遺憾沒有得到可能導致我原來的理論失效的迴應。 –

+0

ebottard是對的。如果您嘗試「grails cf-log」,您會發現該應用程序已經有效地啓動了。當你點擊url時,像「hitting_url導致了太多重定向」。需要弄清楚cf中有什麼問題。 –

+0

是的,同意,現在可以看到「太多重定向消息」。如果我直接轉到HTTPS版本的登錄網址,它可以正常工作。我應該提出這個錯誤嗎? –

0

的問題是,cloudfoundry terminates HTTPS at the loadbalancer。並且無法將HTTPS一路獲取到您的應用,因此'REQUIRES_SECURE_CHANNEL'在cloudfoundry上不起作用。

如果你想要一個嚴重的黑客來試圖檢查用戶和負載均衡器之間是否使用了HTTPS,你可以看看過濾器中的標題。例如。

sslHeaderRequireFilter(controller:'*', action:'*') { 
     before = { 
      def headerNames = request.headerNames.collect{ it }    
      if(! headerNames.contains('sslclientcertstatus')){ 
       render "Only available on https" 
       return false  
      }     
     } 
    } 
+0

問題不是CF終止在路由器上。問題在於,CF不包含HTTP調用的x-forwarded-proto頭,因爲它應該是。這是插件正常運行所必需的。 – gregturn

相關問題