2011-06-25 35 views
12

我們將應用程序從JBoss 5遷移到JBoss6,其中一個主要原因是利用了servlet 3.0的新功能。除了JBoss 6和servlet 3.0的一個新特性之外,一切都可以正常工作:即使請求是通過純HTTP進行的,也可以將會話cookie設置爲僅通過安全通道傳輸。這對我們來說是非常重要的安全功能,可以通過在web.xml中添加使用servlet 3.0的JBoss 6的會話安全功能問題

<secure>true</secure> 

來實現。這是我們的web.xml的一部分:

<session-config> 
<session-timeout>25</session-timeout> 
<cookie-config> 
    <http-only>true</http-only> 
    <secure>true</secure> 
</cookie-config> 
<tracking-mode>COOKIE</tracking-mode> 

當我們刪除

<secure>true</secure> 

一切工作正常。當它位於那裏時,即使在安全頁面(HTTPS)或不安全頁面(HTTP)中,也會爲每個請求生成新的jsessionid。此外,登錄不起作用,因爲用安全憑證登錄後用戶被重定向回登錄頁面。

我想這可能也是Tomcat 7的問題,因爲它也使用servlet 3.0規範。任何意見將不勝感激。

問候

+3

請原諒我的觀點,但恕我直言,JBoss AS 6幾乎和5一樣錯誤。要小心。只需看看狀態爲「關閉」和「不會修復」的JIRA票。爲什麼不是JBoss AS 7? –

+2

@GrzesiekD感謝您的評論。事實上,我們現在已經遷移到了7個。這個問題現在已經快2年了。 – Alex

+0

是的,你是對的。發表評論後,我注意到了這一點。 Mea culpa。 –

回答

2

按照HTTP Specification

安全

可選。安全屬性(無值)指示用戶只要使用(未指定的)安全手段在發回此cookie時聯繫原始服務器 服務器。

的用戶代理(可能是用戶的控制下)可確定 哪種安全級別的其認爲適當的「安全」 餅乾。安全屬性應該被視爲從服務器到用戶代理的安全 建議,表明它在 會話的興趣,以保護cookie內容。

這意味着該規範將向開放的瀏覽器(用戶代理)定義什麼是「安全」。

web.xml中的Secure元素是HTTP Cookie Secure property的參考,您可以使用瀏覽器的調試工具來跟蹤該值。

如果通信不「安全」,瀏覽器將不會根據以下請求將接收到的cookie發送到服務器。

問題不在於JBoss總是返回新的cookie,而是因爲communiation不安全而不返回的瀏覽器。 JBoss然後爲每個請求創建一個新的會話。

非常清楚,對於非加密通信(而非HTTPS),瀏覽器不會發送cookie,因爲您將cookie標記爲secure = true,所以這是非常明顯的。

但是,即使你使用HTTPS,在「安全」是相對安全的瀏覽器概念,例如:

  • 證書可能到期
  • 證書是自簽署
  • 您正在使用從誰簽署證書的一個不同的主機名

這些和其他安全問題可能發生在使用TLS的情況下,這意味着通信是而不是安全。

問題必須出現在您的SSL/TLS或Cookie配置中,這意味着您必須檢查您已完成的工作,並解決問題。我認爲在JBoss或JBossWeb(Tomcat 6 fork)中沒有任何錯誤導致錯誤,並且肯定不是規範錯誤。

我能夠使用TLS和web.xml配置來配置JBoss 6.1.0 Final,並且所有事情都按預期工作。

我建議你仔細檢查你的配置,瀏覽器調試和警報。