2012-08-22 108 views
7

您好我已閱讀Glassfish 3.1.2's JDBCRealm has a new Password Encryption Algorithm field. What is it for?和谷歌搜索類似的主題,但似乎沒有明確的答案已經發布。Glassfish 3.1.2 JDBCRealm配置

總之,我有一個在glassfish 3中工作的jdbc領域,當我升級到3.1.2時,相同的配置不起作用。根據之前的線程,我已經將JaasContext設置爲jdbcDigestRealm(除了jdbcRealm也不起作用),將Digest Algorithm設置爲MD5(我在第3版中使用了MD5並且它工作正常)。對於密碼加密算法,我嘗試了'空白'和'十六進制',都不起作用。

有人可以告訴我應該如何配置。我的憑證表基於mysql,並使用根據http://jugojava.blogspot.hk/2011/02/jdbc-security-realm-with-glassfish-and.html的MD5散列密碼。

回答

14

我成功地使它適用於以下設置。我用我目前(錯誤)的理解添加一些評論。

  • JAASContext =「jdbcRealm」=>該值必須根據文件'glassfish3/glassfish/domains/domain1/config/login.conf'進行設置。默認情況下,類「com.sun.enterprise.security.auth.login.JDBCLoginModule」(實現JDBCrealm)在「jdbcRealm」下配置。在「jdbcDigestRealm」下配置了另一個登錄模塊。這不是當前話題的一部分。
  • JNDI =「...」=>我在那裏放置了一個數據源的名稱,該數據源已經爲我的應用程序的數據庫存在 。
  • UserTable =「MY_SCHEMA.usertable」=> 數據庫表的「完全限定名稱」。
  • UserNameColumn =「參數userid」您存儲用戶名 =>列名稱
  • PasswordColumn =「密碼」 =>列名指定存儲在(散列的 )用戶密碼時應。
  • GroupTable =「MY_SCHEMA.grouptable」=> 數據庫表的「完全限定名稱」。
  • GroupTableUserNameColumn = 「」=>沒有關於這種用法線索...
  • GroupNameColumn = 「」=>至於GROUPID 「您存儲用戶名
  • AssignGroups = =>列名」我瞭解GF代碼,這是一種將組列表分配給在該領域中註冊的每個用戶的方法。這是一種硬編碼。 GlassFish上可用的每個領域或多或少都會使用此屬性。
  • DatabaseUser =「」=>據我所知,如果你不是 使用JNDI(第二個參數),你需要這個。
  • DatabasePassword =「」=>據我所知,如果你不是 使用JNDI(第二個參數),你需要這個。
  • DigestAlgorithm =「SHA-256」=>'MD5','SHA-1'或'SHA-256'。'SHA-256' 是默認值。我們來看'SHA-256'。
  • PasswordEncryptionAlgorithm =「AES」=>摘要算法在存儲密碼之前應用於密碼。新的密碼加密是一個額外的安全層,它允許「散列」(將DA應用於密碼後的字符串)加密。這樣,如果攻擊者從數據庫中檢索密碼,他們將被加密並散列。這樣的數據對攻擊者來說是非常不可能的。
  • Encoding =「Hex」=>您可以選擇'Hex'或'Base64'。十六進制對我來說很方便。
  • Charset =「」=>由於我的數據庫沒有'異國情調'的字符集,我不認爲我需要在那裏設置一些聰明的東西。我把它留空 它工作。

希望它會有所幫助。

PS:如果有人鏈接到REAL文檔(此時不是官方的完整無用的),請在此處輸入鏈接。

+0

有沒有人試過這個?我跟着不成功 – cpliu338

+0

現在用玻璃魚3.1.2在windows機器上。昨晚我嘗試在家使用另一臺PC,它是Fedora Linux上的glassfish 3.1。在v 3.1中沒有「PasswordEncryptionAlgorithm」字段。我需要稍後再檢查v 3.1。 – cpliu338

+0

這個「PasswordEncryptionAlgorithm」字段是非常新的。開始3.1.1或3.1.2 ... ;-) – Algiz

0

第一件事第一件事。你的日誌輸出是什麼? 你的「不工作問題」的症狀是什麼? 是否發生了基本身份驗證彈出窗口? Did you get

No login module configured for jdbcDigestRealm 

或其他錯誤消息?

更改安全日誌級別,如果沒有任何來自不成功登錄嘗試的日誌輸出。

+0

出現一個登錄窗口,我輸入憑據,這在GlassFish v3的工作,並得到了這一點: 警告:WEB9102:網頁登錄失敗:COM .sun.enterprise.security.auth.login.common.LoginException:登錄失敗:java.lang.NullPointerException \t at com.sun.enterprise.security.auth.login.DigestLoginModule.login(DigestLoginModule.java:107) \t at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) \t at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorI mpl.java:39) ... – cpliu338

+0

您的lib目錄中是否有JDBC連接器庫?看起來你忘了在那裏複製它。 設置最好的安全日誌級別。 – Erwin

+0

mysql-connector-java-5.1.6-bin.jar位於[installbase]/glassfish/lib中。我可以ping連接池,並且可以使用JDBC在我的程序中從數據庫檢索數據。如何將安全日誌級別設置爲最佳? – cpliu338

0

我對jdbcRealm問題有兩個變種。第一個存在於使用GF 3.1.1創建的域中,該域在將GF服務器更新到3.1.2.2版本後繼續工作。然後我在此服務器上創建了一個新域。新域名使用jdbcRealm配置。除3.1.1配置屏幕下不存在的「密碼加密算法」之外,所有參數對於3.1.1配置都是相同的。當我嘗試使用我的Web應用程序登錄時,我一直在日誌文件中收到「jdbcrealm.invaliduserreason [#]」錯誤。

我能夠解決併成功登錄到我的應用程序的唯一方法是將AES添加到「密碼加密算法」字段中。我保存了更改並重新啓動了服務器,並再次成功驗證jdbcRealm連接中的用戶身份。

1

我今天花了一段時間玩這個(Java EE 7,Glassfish 4在Ubuntu 12.04上)。事實證明,Realm Page上的大部分字段都是不需要的。以下字段是唯一需要建立到數據庫的成功連接的字段。

  • 領域名稱 - 任何名稱,只要您在網絡中使用相同的名稱。XML

  • JAAS語境 - 任何名稱

  • JNDI - 這包含所有用戶

  • 用戶名稱列表 - 任何名稱(I用JDBC/DB名稱)

  • 用戶表 - 包含用戶名的用戶表中的列

  • 密碼 - 包含散列密碼的列​​(SHA 256)

  • 組表 - 表包含組

  • 組名稱列 - 包含組名稱

我離開一切空白列在表組。我的數據庫密碼列使用SHA 256密碼散列。

我通過在'密碼加密'字段中填入隨機文本並保存它進行測試。重新部署我的應用程序並重新啓動Glassfish 4.仍然有效。這意味着該字段在仍然存在時不再被讀取。

P.S - 第一個答案中提到的真實文檔仍然很差。