2012-08-22 16 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にアップグレードすると、同じ設定が機能しません。以前のスレッドによると、JdbcDigestRealm(jdbcRealmに加えて動作しない)にJaasContextを設定し、Digest AlgorithmをMD5に設定しました(私はMD5をv3で使用していました。パスワード暗号化アルゴリズムの場合、私は '空白'を試して、 'hex'は両方とも動作しません。

どうすれば設定する必要がありますか教えてください。私の資格情報テーブルは、http://jugojava.blogspot.hk/2011/02/jdbc-security-realm-with-glassfish-and.htmlによるMD5ハッシュされたパスワードを持つmysqlに基づいています。

答えて

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"
  • あなたは(ハッシュの )ユーザーpassswordを保存
  • PasswordColumn = "パスワード" =>列名。
  • GroupTable = "MY_SCHEMA.grouptable" =>データベーステーブルの の「完全修飾名」です。
  • GroupTableUserNameColumn = "" =>このの使用状況について全く分からない...
  • GroupNameColumn = "グループID" は、ユーザーを保存=>列名 名
  • AssignGroups = "限り" =>私はGFコードを理解しています。これは、レルムに登録されているすべてのユーザーにグループのリストを割り当てる方法です。ハードコーディングのようなものです。 GlassFishで利用できるすべての領域(多分)がこのプロパティを利用できます。
  • DatabaseUser = "" =>私が理解したように、 でJNDI(2番目のパラメータ)を使用していない場合は、これが必要です。
  • DatabasePassword = "" =>理解したように、 のJNDI(2番目のパラメータ)を使用していない場合は、これが必要です。
  • DigestAlgorithm = "SHA-256" => 'MD5'、 'SHA-1'または 'SHA-256'。'SHA-256' がデフォルトです。 SHA-256を使いましょう。
  • PasswordEncryptionAlgorithm = "AES" =>ダイジェストアルゴリズムは、パスワードを保存する前にパスワードに適用されます。新しいパスワードの暗号化は、暗号化される "ハッシュ"(DAがパスワードに適用された後の文字列)を許可するセキュリティの追加層です。このようにして、攻撃者がデータベースからパスワードを取得すると、暗号化されハッシュされます。そのようなデータが攻撃者にとって有用である可能性は非常に低いです。
  • Encoding = "Hex" =>「16進数」または「Base64」のいずれかを選択できます。 ヘックスは私には便利でした。
  • Charset = "" =>データベースに「エキゾチックな」文字セットがないため、私は 私はそこに何かを設定する必要はないと思います。私はそれを空白にしておきます。 それは動作します。

希望すると助かります。

PS:誰かがREALのドキュメント(この時点で完全に役に立たない公式のものではありません)へのリンクを持っている場合は、ここにリンクを入れてください。

+0

にアップロードされています。私は従うと成功しませんでした – cpliu338

+0

Windowsマシン上でglassfish 3.1.2で今はOKです。昨夜、私は自宅でFedora Linuxのglassfish 3.1という別のPCを使ってみました。 v 3.1では、「PasswordEncryptionAlgorithm」フィールドはありません。後でv 3.1について再度確認する必要があります。 – cpliu338

+0

この「PasswordEncryptionAlgorithm」フィールドは非常に新しいものです。 3.1.1または3.1.2の開始... ;-) – Algiz

0

最初のものが最初です。あなたのログ出力は何ですか? あなたの「うまくいかない問題」の症状は何ですか? 基本認証ポップアップウィンドウが表示されましたか? 入手しました

No login module configured for jdbcDigestRealm 

または他のエラーメッセージ?

セキュリティログレベルを変更するログインに失敗した場合のログ出力がない場合。

+0

は、ログインウィンドウが表示されたら、私はGlassfishのv3ので働いていた資格情報、で入力し、そしてこの得た: WARNING:WEB9102:失敗したWebログイン:COMを.sun.enterprise.security.auth.login.common.LoginException:ログインに失敗しました:java.lang.NullPointerException \t com.sun.enterprise.security.auth.login.DigestLoginModule.login(DigestLoginModule.java:107) \t sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) \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には2つのバリエーションがあります。最初は、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で使用していました)私はこれを試していました。判明しているように、領域ページのほとんどのフィールドは必要ありません。次のフィールドは、データベースへの正常な接続を確立するために必要なフィールドだけでした。

  • レルム名 - ウェブで同じ名前を使用していれば任意の名前です。XML

  • JAASコンテキスト - 任意の名前

  • JNDI - 任意の名前(Iは、JDBC/DB名を使用)

  • ユーザー表 - すべてのユーザを含むテーブル

  • ユーザー名欄 - ユーザー名を含むユーザーテーブルの列

  • パスワード - ハッシュパスワード(SHA 256)を含む列

  • グループ表 - 表のグループ

  • グループ名列が含まれ - グループ名

私は他のすべて空白のままを含むグループテーブルの列を。私のデータベースのパスワード列には、SHA 256を使用してハッシュされたパスワードがありました。

「パスワードの暗号化」フィールドにランダムなテキストを入力して保存してテストしました。私のアプリケーションを再配布し、Glassfish 4を再起動しました。これは、まだ存在しているフィールドがもう読み込まれていないことを意味します。

P.S - 最初の回答に記載されているような実際のドキュメントはまだまだです。

関連する問題