14

私のアプリケーションは、従来の JNDI ルックアップと RMI-IIOP メソッド呼び出しのおかげで、EJB ステートレス セッション Bean を呼び出すスタンドアロンの Swing クライアントです。Java WebStart アプリケーションとして開始されます。私の目的は、Linux で実行されている Windows ワークステーション、ActiveDirectory、および WebSphere サーバー間の Kerberos SSO のおかげで、メソッドEJBContextを使用してクライアント ユーザーの ID を取得することです。getCallerPrincipal

インフォセンターのドキュメントのおかげで、 Kerberos 認証をサポートするようにネットワーク配置モードで WebSphere セルを既に正常に構成できました。

krb5.confとファイルはどちらも OKで、 Linuxとkrb5.keytabの両方でテストされています。kinitklistwsadmin$AdminTask validateKrbConfigtrue

クライアントのセットアップでは、JAASlogin.configファイルのみを参照して、コマンド システム プロパティで有効にします。私の直感は、おそらく十分ではないことを教えてくれます。

しかし今、テスト ケースを完成させるための情報が見つかりません。

  • Kerberos ネゴシエーションをトリガーするには、JNDI 初期コンテキスト環境をどのように設定する必要がありますか?
  • EJB をロールで保護するなど、サーバー側に他の要件がある場合 (たとえば、JBoss はそれを必要としません) ?

アップデート

で JavaEE クライアント コンテナーを実行していない./launchClientため、JNLP で読み取りに必要なプロパティsas.client.propsと JAAS ログイン構成を設定しました。

<property name="java.security.auth.login.config" value="C:\temp\wsjaas_client.config"/>
<property name="com.ibm.CORBA.ConfigURL" value="C:\temp\sas.client.props"/>

Mywsjaas_client.configは Oracle Java 用なので、以下が含まれます。

WSKRB5Login{
    com.sun.security.auth.module.Krb5LoginModule required
       debug=true useTicketCache=true doNotPrompt=true;
};

私のsas.client.props内容:

com.ibm.CORBA.securityEnabled=true
com.ibm.CORBA.authenticationTarget=KRB5
com.ibm.CORBA.loginSource=krb5Ccache
com.ibm.CORBA.loginUserid=
com.ibm.CORBA.loginPassword=
com.ibm.CORBA.krb5CcacheFile=
com.ibm.CORBA.krb5ConfigFile=C:\\temp\\krb5.conf

現時点では、Kerberos 認証はトリガーされません。WAS/myserver.mydomain.com(Windows または Linux ワークステーションからの) Kerberos キャッシュには SPN の TGS がなく、JNDI 接続は引き続き匿名で確立されます。

エラーメッセージも警告も、最終的にプリンシパルもありません。何が間違っているか、何が欠けているかを診断するにはどうすればよいですか?

2012/06/20 更新

ここにいくつかの前進があります。Oracle Java で実行するアプリケーション JNLP では、次のプロパティを設定して IBM ORB を使用し、完全なトレースとデバッグ情報を有効にしました。

<property name="org.omg.CORBA.ORBSingletonClass" value="com.ibm.rmi.corba.ORBSingleton"/>
<property name="org.omg.CORBA.ORBClass" value="com.ibm.CORBA.iiop.ORB"/>
<property name="traceSettingsFile" value="C:\temp\TraceSettings.properties"/>

ファイルTraceSettings.propertiesには

traceFileName=c:\\temp\\traces.log
ORBRas=all=enabled
SASRas=all=enabled
com.ibm.*=all=enabled

WebSphere 7 Security IBM RedBookの大部分を読んだ後でも、クライアント側から CSIv2 トリガー Kerberos 認証を取得できません。

4

3 に答える 3

6

GSS-API/Kerberos v5 認証ガイドによると、JNDI コンテキストを呼び出す前に、Kerberos に対して認証する必要があります。Kerberos 構成を実行したら、次のように初期コンテキストを構成します。

  • 初期コンテキストを作成するときは、Context.SECURITY_AUTHENTICATION (API リファレンス ドキュメント内) 環境プロパティを文字列 "GSSAPI" に設定します。

過去に、Java クライアントで Kerberos を使用するようにしました (ただし、JNDI は使用しませんでした)。クライアント側で JVM オプションとローカル構成ファイルの必要性を取り除くための私のアプローチを次に示します (クライアントが認証を試みる前に、このコードを呼び出します)。

public static void initKerberosConfig() 
{                 
        System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); 
        System.setProperty("java.security.krb5.kdc", "host.name:88"); 
        System.setProperty("java.security.krb5.realm", "REALM"); 
        System.setProperty("sun.security.krb5.debug", "false");                                 
        Configuration progConfig = getProgramaticLoginConfig(); 
        Configuration.setConfiguration(progConfig); 
} 

private static Configuration getProgramaticLoginConfig() 
{ 
        HashMap<String, String> options = new HashMap<String, String>(); 
        options.put("useTicketCache", "true"); 
        options.put("doNotPrompt", "true");                                                 
        AppConfigurationEntry krb5LoginModule = new AppConfigurationEntry("com.sun.security.auth.module.Krb5LoginModule", LoginModuleControlFlag.REQUIRED, options); 
        final AppConfigurationEntry[] aces = new AppConfigurationEntry[]{krb5LoginModule}; 
        Configuration progConfig = new Configuration() 
        { 
                @Override 
                public AppConfigurationEntry[] getAppConfigurationEntry(String arg0) 
                {                                 
                        return aces; 
                } 

        }; 
        return progConfig; 
} 

おそらく、コンテキストに合わせてこれを微調整する必要があります(java.security.krb5.kdc正しくjava.security.krb5.realmないでしょう)-しかし、それが役立つことを願っています. 大量sun.security.krb5.debug trueのログを取得します。

于 2012-05-21T22:13:59.387 に答える
4

従った手順で具体的に言及していないので、提供したクライアントセットアップリンクのように sas.client.props を構成しましたか?

この構成の作成方法の例と、Application Client の残りの構成については、 RedBook Implementing Kerberos in a WebSphere Application Server Environmentを参照してください。

セクション 13.5 (13.5 Java EE アプリケーション クライアントの構成) では、sas.client.props ファイルを含むシック クライアント ランタイムの設定例を示します。

于 2012-05-17T13:02:35.447 に答える
3

コンテキストを要約すると、IBM ORB が含まれ、認証なしで接続するように構成された Sun JavaSE 6 で実行されている Java WebStart のおかげで、Linux で実行されている IBM WebSphere とアプリケーションが展開されて以来、私たちの展開は本番環境にあります。ここで、RMI-IIOP を介した Kerberos 認証とシングル サインオンを有効にしたいと考えています。これは、WebSphere 6 以降でサポートされていると思います (と思います)。

ここに答えがあります。

WebSphere 7 以降、サーバーごとにセキュリティーの側面を構成するための新しい概念、セキュリティー・ドメインが導入されました。理論的には、セキュリティ ドメインで変更されていないオプションはすべて、グローバル セキュリティセクションから継承されます。

Kerberos セットアップをテストするとき、セルで実行されている他のサーバーとの問題を回避するために、テスト サーバー専用のセキュリティ ドメインを作成しました。

ただし、グローバル セキュリティでKerberos が有効になっている場合でも、独自のセキュリティ ドメインで構成されたサーバーには継承/有効化されません。

Kerberos オプションが表示され、有効になっているデフォルトのグローバル セキュリティでテスト サーバーを実行するとすぐに、通常の ClassPath とドキュメントで宣言されたすべてのプロパティを使用してcmd bat スクリプトから実行されるIBM JavaSE 6で Kerberos 認証が機能し始めます。

注意: JNDIContext.SECURITY_AUTHENTICATIONオプションは決して設定されません。逆コンパイル後、IBM ORB で使用できる値はとのみですが、noneまだ実装されていません。simplestrongstrong

file:/C:/temp/sas.client.config別のポイント: 生成されたログによると、IBM ORB はの値として使用できませんcom.ibm.CORBA.ConfigURL。ファイルパスではなく、URI でなければなりません。Cホスト名を解決するための DNS ルックアップの失敗さえありました。アルフ。すべてのドキュメントの例は Unix ベースでfile:/path/to/sas.client.configあるため、HTTP サーバーからそのファイルを配信する前に多くの試行を行いました。

デプロイメントのJava WebStart 部分:

  • セキュリティと Kerberos 設定のない同じ元の JNLP は、Oracle JavaSE 6 と IBM Java 6 の両方で完全に機能します。

  • WebSphere セキュリティを有効にし、JNLP で Kerberos (およびその変更セットのみ) を使用すると、IBM Java 6 で実行されている IBM ORB はNoClassDefFoundError、ClassPath で (まだ/常に) 利用可能な ffdc ログ マネージャーの実装について不平を言います。Java WebStart で保護された ClassLoader 階層とのコードの非互換性のように思えます。

  • Kerberos JNLP を使用すると、Oracle JavaSE 6 で実行される IBM ORB は、単にセキュリティ設定を無視し、通常どおり匿名で接続するように見えます。

したがって、最初のステップは現在機能しています。IBM Java 6 はコマンドラインから開始されましたが、調査は私たちの目標に到達するために終わっていません: Java WebStart コンテキストで Oracle JavaSE 6 を使用した Kerberos。

于 2012-06-29T06:50:23.420 に答える