2011-12-16 3 views
5

ローカルファイルから読み込むBeanを登録し、必要に応じて他のJMXクライアントが利用できるようにするJMXサーバーがあります。 "jconsole"を使用するかTomcatコンテナの下で動作するJavaアプリケーションを使用してサーバーにアクセスできます。Java 6で実行されているJMXクライアント/サーバーでのKerberos認証/認可のサポート

私が望むのは、「未知」のIDがJMXサーバーにアクセスするのを防ぐために認証を追加することです。私は私のJMXサーバーは、上記の構成で起動して接続しようとすると、私は、Kerberos認証@サーバを追加したこの

-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=5555 
-Dcom.sun.management.jmxremote.authenticate=true 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.security.auth.login.config=./conf/jaas.conf 
-Djava.security.krb5.conf=./conf/krb5.conf 
-Dcom.sun.management.jmxremote.login.config=MyKrbAuth 
-Ddynamic.mbean.store=./conf/mbeans 
-Djava.net.preferIPv4Stack=true 

次のJVMオプションを使用して、私のjaas.confをこのようになります>>

MyKrbAuth { 
com.sun.security.auth.module.Krb5LoginModule required debug=true debugNative=true; 
}; 

を達成するためにそれ>>私は、クライアント側で次の例外を取得し、接続に失敗し、「jconsoleを」使用して

Cipher: Crypto Permission check failed 
Cipher: granted: (CryptoPermission * 128) 
Cipher: requesting: (CryptoPermission AES 256) 

しかし、サーバーの認証に成功したように見える>>

[java] [STARTED] Mbean Server 
[java] Debug is true storeKey false useTicketCache false useKeyTab false doNotPrompt false ticketCache is null isInitiator true KeyTab is null refreshKrb5Config is false principal is null tryFirstPass is false useFirstPass is false storePass is false clearPass is false 
[java] [Krb5LoginModule] user entered username: username 
[java] 
[java] Acquire TGT using AS Exchange 
[java] principal is [email protected] 
[java] EncryptionKey: keyType=3 keyBytes (hex dump)=0000: FD 46 7C 02 19 9B 34 E9 
[java] EncryptionKey: keyType=1 keyBytes (hex dump)=0000: FD 46 7C 02 19 9B 34 E9 
[java] EncryptionKey: keyType=23 keyBytes (hex dump)=0000: FE 6D 82 01 8A D7 AB 60 98 
[java] EncryptionKey: keyType=16 keyBytes (hex dump)=0000: 89 02 31 5D F7 5B 3E 89 BC F7 8A 01 A1 80 C7 
[java] EncryptionKey: keyType=17 keyBytes (hex dump)=0000: A5 67 71 17 F6 57 A9 26 01 09 B1 EB 75 46 6C 
[java] 
[java] Commit Succeeded 
[java] 

上記から、クライアントはレスポンス(AES256は暗号化されています)をデコードできないようです。

答えて

3

上記の問題を解決しました。ここ は引数=>

-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=<port_no> 
-Dcom.sun.management.jmxremote.authenticate=true 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.security.auth.login.config=<locatin_of_jaas.conf> 
-Djava.security.krb5.conf=<locatin_of_krb5.conf> 
-Dcom.sun.management.jmxremote.login.config=<name_of_login_config_to_be_used> 
-Djava.net.preferIPv4Stack=true 
次のセットでスタートサーバ

  1. 、ケルベロス@ JMXサーバーを有効にするには、あなたのJMXクライアント/サーバー

    でKerberos認証/認可を導入するステップであります

  2. $ JAVA_HOME/jre/lib/management/jmxremote.accessにアクセス・エントリを追加します。ユーザーが認証されると、jmxremote.accessに基づいてJMXサーバーへの読み取り/書き込みアクセスが提供されます。 .accessのファイルの場所は、サーバーで次のJVM引数を使用して提供することができるデバッグオプションでKerberos @ JMXクライアント(jconsoleを)

    1. スタートJConsoleを有効にするには

      -Dcom.sun.management.jmxremote.access.file=<acees_control_file>  
      

    を起動すると接続&サーバー

    jconsole -J-Djava.security.debug=all 
    
  3. 要求された暗号化がAES256の場合、downlo ad unlimited strength cryptography policy jar files、ポリシーファイルを展開して$ JAVA_HOME/jre/lib/security /に配置します。 [政策に含まれていることを指摘してくれたMarkに感謝します。]

あなたはまだ、あなたがlogging.propertiesを使用してのjconsoleのための詳細なデバッグを有効にすることができ、接続に問題に直面している場合は、上記のJMXクライアントとJMXサーバー側

の両方でのKerberosの仕事をしなければならない

は、ファイル=>

handlers = java.util.logging.ConsoleHandler 
.level = INFO 
java.util.logging.ConsoleHandler.level = FINEST 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 
// Use FINER or FINEST for javax.management.remote.level - FINEST is very verbose... 
javax.management.level = FINEST 
javax.management.remote.level = FINER 

そして、私はfolloweいる

jconsole -J-Djava.util.logging.config.file=<location_of_logging.properties> 
+0

'jmxremote.access'に追加したアクセスエントリは何ですか?そのファイルのドキュメントを読むことは、ロールベースのアクセス制御のためです。 – Adam

+0

私は知っていますが、login.configの 'authzIdentity'要素を使って、ユーザー名をファイルに追加するのではなく' jmxremote.access'ロールを指定しようとしましたか? – Adam

3

Javaインストールでは、unlimited strength cryptography policy file(リンクはJava 6の場合、他の場合はjava.oracle.comを参照)を含める必要があります。デフォルトでは、JavaはAES256のような強力な暗号化を使用することを許可していません(暗号化を武器/武器とみなす不当な米国の輸出法のため)。ポリシーファイルはより強力な暗号化を解除します。

+0

お返事ありがとうございます。無制限の強度暗号化ポリシーファイルをインストールすると、例外が隠されました。しかし、まだ「接続に失敗しました」と表示されているjoconsole。もっとデバッグしてすぐに更新されます –

0

使用jconsoleを開始上記の手順を実行して、jconsoleに自分のユーザーIDとパスワードを入力すれば、Kerberos認証が機能するようになりました。必然的に、サーバー上でcom.sun.management.jmxremote.ssl = falseに設定されているため、これはクリアテキストでパスワードを電信線で送信します。

クライアント側でキャッシュされたチケットを使用してjconsoleに接続できましたか?たとえば、あなたがした場合:

kinit user 
Password for [email protected]: 
New ticket is stored in cache file C:\Users\user\krb5cc_user 

次に、ユーザーID /パスワードを入力せずにjconsoleをサーバーに接続しようとしましたか?

+0

詳細については、https://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.htmlを参照してください。しかし、おそらくjconsoleを再プログラムしてそれを行う必要があります。 – Adam

関連する問題