2017-05-15 5 views
0

私はJDK 1.8Krb5LoginModuleに依存するJMeterを実行しています。JavaクライアントとKerberos/SSO - Krb5LoginModule - チケットを再利用しない

Krb5LoginModuleは、複数のリクエストにわたってケルベロスセッションを維持できないようです。これにより、すべての要求の前にHTTP 401が更新され、ハンドシェイクが更新されます。

パフォーマンスの問題が断続的に発生するプロダクション環境を再現しようとしていますが、Kerberos/SSO認証をテストに含めたいのですが、私のWindowsクライアントのように動作するように設定することはできませんRESTサーバー。

RESTサーバーは、数多くのExcelアドインクライアントにデータを提供します。これらのクライアントは、Kerberosで認証するように設定されています。アクセスログでは、各クライアントが最初にHTTPステータス401応答をトリガし、その後にクライアントのアクティビティの期間中に200、さらに200秒が続くことがわかります。

ただ混乱を避けるために、サーバーは、Kerberos手揺れを処理していると、サーブレットコンテナのセッションを使用してではありません。

私のテストが実行されると、すべての要求がサーバーの401によって拒否され、JavaがKerberos KDCから別のチケットを取得してから再送信することがわかりました。これがうまくいく間、私のKDCサーバーは毎秒2つ以上の要求を処理することができず、要求をタイムアウトしてしまうので、負荷テストを非常に増加させることはできません。

なぜ、Krb5LoginModuleはKDCから取得したケルベロスチケットを保持していないので、Excelのようにすべての呼び出しを事前認証していますか?

これは私が設定するために試したものです:

JMeter { 
    com.sun.security.auth.module.Krb5LoginModule required 
     useTicketCache=true 
     ticketCache="FILE:krb.cache" 
     useKeyTab=true 
     keyTab="FILE:krb.keytab" 
     storeKey=true 
     principal="[email protected]" 
     debug=true; 
}; 

私は、チケットキャッシュでとせずに、キータブでとせずに試してみました。私はちょうど設定が間違っていることを望むが、私はどのように見ることができません。

これは私が上で私の仮定を基づかてるものです:Oracle: Single sign-on using Kerberos

とAPI:Krb5LoginModule - Oracle JDK 1.8 API docs

答えて

0
  1. 私はあなたがパスを引用符で囲む必要はないと思うと、このFILE:ビットではありません以下のように、同様に必要な:あなたがチケットキャッシュとキータブの両方を使用しているのはなぜ

    ticketCache=/path/to/your/krb.cache 
    
  2. 、1はENOする必要がありますugh(フォールバックシナリオをテストする必要がない限り)

  3. 使用しているオペレーティングシステムは?

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

    、次のレジストリキー(Windows 7)

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters 
    Value Name: allowtgtsessionkey 
    Value Type: REG_DWORD 
    Value: 0x01 (default is 0) 
    

    参照設定:

  • JGSS Troubleshooting
  • Windows Authentication with Apache JMeter
  • +0

    "Kerberosで認証するように設定された何百ものExcelアドインクライアントにデータを提供します。" - クライアントが接続を閉じ、新しい要求でクライアントが承認ヘッダーを提供しない場合それはすべて始まります。クライアントは接続をキャッシュしたり、接続を開いたままにしたりする必要があります。私は、JMeterが各リクエストの後に接続を閉じるという悪い気持ちを持っています。 – gusto2

    +0

    これはLinux上です。そのレジストリ設定に相当する設定は何でしょうか? "ターゲットセッションキーを許可する"に何をするのですか? – Adam

    +0

    @ gusto2確実に接続を維持しているか閉じているかは関係ありません。認証チケットが重要なヘッダーです。 Krb5LoginModuleは401の後の最初の要求でのみそれを提供し、次回再びそれを忘れてしまいます。私はJMeterでキープアライブを使用することができたと思いますが、私は真実の環境を複製することはありません。 – Adam

    0

    JAASがキャッシュにチケットを永続化するつもりはない、それだけですでに保存されたチケットを取得することができます。 私の質問で詳細情報/ here

    に答えるあなたはまた、実行するために、Krb5LoginManger自分自身を書き換えることができ、キャッシュファイルにチケットを持続するために、(Javaの分布やLinuxのツールに同梱)kinitツールを使用する必要がありますこれ(難しい方法)。

    しかし、私は、GSSの控えめなことで、サーバーとクライアントの両方の同じセッションが、初期化時に作成した同じGSSContextオブジェクトを常に参照する必要があるため、Adamワークフローで何かが壊れていると考えます。

    関連する問題