2016-09-13 18 views
3

複数のWebサーバー(srv1srv2など)に同じHTTPベースのアプリケーションを展開します。 SPNEGO authでアプリケーションを保護する。サーバーはLinuxであり、ADはその存在を知らない。つまり、ドメインに参加していない。私はSPNEGO全体を単一のホスト上でスムーズに動かすことができました。今すぐ次のホストに移動します。私はあなたがADのADサーバ上で生成 Kerberos/SPNEGO:同じADアカウントの複数のSPN

  • A SPN
  • キータブを(

    1. アカウントが必要なことを教えてくれます発見しました

      ほとんどのガイドが、その後 は、Linuxホストに移動しました)

    私は、(2)+(3)は常にサーバごとにする必要があると考えていますが、(1)についてはいくらか不確かです。 1つのアカウントでしかできませんか?私が1つしかできないのであれば、これらの口座をすべてADに持たないことが本当に好きです。

    This blogはそれを行うことができる方法のために良いレシピを持っています(srv1用)ktpassの最初の呼び出しをあなたがインターネット上で見つけるすべてのガイドで説明したようにする必要があります、しかし、後続の呼び出し(のためのsrv2srv3、など)は、-setpassおよび-setupnオプションを使用する必要があります。

    しかし、ktpass.exeツールを使用すると、アカウントのuserPrincipalName属性は、最後の呼び出しのprincで指定されたとおりに変更されます。ktpassです。したがって、srvの名前(例: srv3は名前にコード化されているため、アカウントの名前は基本的にktpassの呼び出しごとに変更されます。 WebサーバーがSPNEGOイベントのチェーンの最後のステップを実行すると、資格としてkeytabを使用してADに接続するため、SPNに等しいuserPrincipalNameのADアカウントが検索されます。この手順は失敗します。 (source、最後の投稿にスクロール、リスト項目3)。これと矛盾するのは、私がTomcatとJAASを使用していることです。私が理解できる限り、hardcode the principal name to use in my jaas.conf fileということができるので、keytabからプリンシパル名を効果的に無視できます。

    ADの複数のアプリサーバーと単一のアカウントが動作することはありますか?

  • +0

    JAASの設定ファイルでは、システムがKDCに提示するプリンシパル(明示的に)と「ハッシュされたパスワード」(キータブファイルから)を定義しています。あなたのケースでは、KDCはActive Directoryであり、ADはプリンシパルをアカウントIDとして使用しません**。これが 'setspn'コマンドのポイントです:口座IDと(リストの)SPNの間に1..Nマッピングを定義することです。私は 'userPrincipalName' LDAPフィールドがちょうど氷山の先端であると思います...そして、ADは実際のIDとプリンシパルを解決するために何か他のものを使います。 –

    +0

    ええ、おそらく私の問題は、TomcatとADの間の最後のステップで何が起こっているのか本当に理解していないということでしょう。 – peterh

    +0

    MITケルベロスサービスであって、マイクロソフトの生き物ではないかのように、Tomcatはポート88に接続して通常のKerberosを処理します。 –

    答えて

    1

    要するに、はい、うまくいくと思います。まず最初に、あなたの質問やコメントに正しく記述されていないものやいくつかの文を明確にしましょう:

    同じDNS名を扱う3台のマシンがあります。つまり、DNSラウンドロビンを持っています:service.example .comはIPやロードバランサ(ソートが難しい)が負荷に応じてAレコードのIPを1つしか持たない場合、シャッフルされたリストを返します。 Kerberosの場合、両方の設定は結果が同じです。 Kerberos認証が必要な場合、ADがサービスまたはサーバーの存在を認識していないとは言えません。そしてでなければなりません。そうしないと、サーバーに渡すクライアントのサービスチケットを作成できません。さらに、Tomcat will not contactは、サービスチケットがアカウントの長期キーで暗号化されているため、KDCがセキュリティコンテキストを受け入れることができます。

    ここにアプローチがあります.1つのSPNを1つのマシンにバインドでき、複数のバインディングが許可されていないことが既に分かっています。これは、マシンアカウント(srv1$など)にバインドされたマシン名を持つ場合に当てはまります。サービスアカウントが必要です。サービスアカウントはパスワードの有効期限のない通常のアカウントです(例:[email protected])。このアカウントでは、CNAMEまたはAレコードをバインドします。このサービスアカウントですべての秘密のコンテキストを受け入れるようにTomcat認証者に依頼してもうまくいきます。

    UnixライクなOSでこの魔法のサービスアカウントを作成する方法は? 使用mskutil

    1. には、
    2. は、そのサービスアカウントのキータブを作成し、そのサービスアカウントへのごSPNバインド
    3. をサービスアカウントを作成してキータブを更新しました。

    その後、使用に適したキータブがあります。アカウントが存在するLDAPクエリ(SofterraのLDAPブラウザなど)を確認し、SPN(servicePrincipalName)がそのアカウントにバインドされていることを確認します。

    重要:あなたの顧客のいずれかが、MIT KerberosまたはHeimdalの使用している場合、あなたは必見はあなたのあなたのkrb5.confrdns = falseを設定します。

    Godspeed!

    +0

    実際に私は3つのサーバがDNSに同じ名前を持っているとは言いませんでした。あなたはリンクされた画像がTomcatのしくみを表すものではありません。 * ADに連絡します。なぜ私は知らないのですか?最後に再。 「このアカウントでは、CNAMEまたはAレコードをバインドします」というサービスアカウント。 Firefoxなどの一部のブラウザでは、Aレコードのサービス名(常に!)が作成されるため、このような互換性がブラウザ間で保証されるため、Aレコードが必要です。 – peterh

    +0

    @peterh TomcatがADにコンタクトすると思いますか?あなたがWiresharkでそれを見ない限り、それは間違ったままです。 –

    +1

    @ Michael-Oはここで正しいです。アプリケーションサーバーは、Kerberos認証のためにADに接続しません。 –

    関連する問題