web-dev-qa-db-ja.com

1つのホスト名で複数のSPNEGO認証済みWebサーバー

[〜#〜] spnego [〜#〜] サーブレットフィルターと8080のリッスンポートを使用してJavaサービスをセットアップしようとしていましたが、 IIS7でホストされているWebアプリケーションも実行しているホスト。

SPNEGOのインストール手順に従い、HTTP/canonical.Host.nameのSPNを作成し、Javaサービスの認証を実行するユーザーにバインドしました。

この変更後、JavaサービスはSPNEGOを介してクライアントを認証できますが、カスタムID(つまり、ApplicationPoolIdentityではなくユーザー名)で実行されているIIS7アプリケーションプールが突然認証できません

私がここで理解していないこと:

  • HTTP/canonical.Host.nameを介してチェックされた)を使用して定義されたsetspn -QのSPNがない場合、Kerberos認証はIISに対してどのように機能しますか?クライアントは引き続きこのSPNのチケットを要求および受信します。
  • 興味深いことに、認証に成功したJavaサービス)のIDでアプリケーションプールを実行しようとしました。SPNが定義されている限り、それでも機能しませんでした。Kerberosチケットで認証を試みます。 KRB_AP_ERR_MODIFIEDが返され、失敗しました。SPNが登録されているユーザーとしてアプリケーションプールを実行しても、この動作は変わりませんでした。
  • Microsoft 指定 SPNにポート番号を含めるが、IEはこれに準拠しておらず、SPNでポート番号を送信することはない(FirefoxおよびChromeこの動作に従います)。

それで、同じホスト上に複数の独立したSPNEGO認証サービスを持つ方法はありますか?

4
themel

最後の最初:IEレジストリキーをいじらずに、同じホスト上の複数のSPNEGO認証サービスの場合は、異なる名前を使用します。

•(setspn -Qで確認した)を使用して定義されたHTTP/canonical.Host.nameのSPNがない場合、Kerberos認証はIISに対してどのように機能しますか?)クライアントは引き続きこれのチケットを要求および受信しますSPN。

これは、Host\boxname SPNに基づく自動フォールバックであり、ドメイン参加時にすべてのコンピューターに対して作成されます-DCが要求どおりにSPECIFICSERVICE\boxnameに一致するものを見つけられない場合)クライアントアプリケーションによって、Host\boxnameに基づいてチケットが提供されます。

SETSPN -L boxnameを使用して、セキュリティプリンシパル(ユーザーまたはコンピューターアカウント)に関連付けられているSPNを一覧表示します。

•興味深いことに、認証に成功したJavaサービス)のIDでアプリケーションプールを実行しようとしました。SPNが定義されている限りは機能しませんでした。Kerberosで認証を試みます。チケットが失敗し、KRB_AP_ERR_MODIFIEDが返されました。SPNが登録されているユーザーとしてアプリケーションプールを実行しても、この動作は変わりませんでした。

IIS 7のデフォルトはuseAppPoolCredentials = false、useKernelMode = trueです。アプリプールIDを使用してKerberosチケットをデコードするには、これらの一方または両方を切り替える必要があります。

•MicrosoftはSPNにポート番号を含めるように指定していますが、IEはこれに準拠しておらず、SPNでポート番号を送信することはありません(FirefoxおよびChrome follow inこの動作)。

そして、問題の本当の核心に戻ります。他のすべてが修正されたとき、IEなどはデフォルトでポート番号を含まないので、最も変更の少ないソリューションは単に異なるものを実行することです同じボックスのホストヘッダー。

また、別のIEの動作(すべてのクライアントのレジストリ設定の変更に対して同じ引数を使用)のため、CNAMEは適切な選択ではなく、代わりにAレコードを使用することにも注意してください。

もっと ここここ そしてより少ない程度で ここ

2
TristanK

このKBからregキーを取得しましたか http://support.Microsoft.com/default.aspx?scid=kb;EN-US;908209 クライアントで構成されていますか?それ以外の場合IEは正しいチケットを要求しません。明確にするために、regキーはIE6 + hotfixに付属していますが、それ以降はIEのすべてのバージョンに適用されます。

私はあなたの設定を理解しているかどうかわかりません。 「Javaサービス」に使用するサービスアカウントにHTTP/canonical.Host.name SPNが設定されていますか?

異なるIDを使用して、ボックス上で複数のサービスを実行できます。したがって、HTTP /Host1.Host.nameとHTTP/Host2.Host.nameというサービスを両方とも同じホスト上に置くことができます。必要に応じて、同じサービスアカウントまたは異なるサービスアカウントに関連するSPNを登録できます。

HTTP SPNがどこにも明示的に設定されていない場合、HTTPSPNの要求はホストベースのSPNを持つオブジェクトにマップされます。このマッピングは、CN = Directory Service、CN = Windows NT、CN = Services、CN = Configuration、DC = forest1、DC = local(forest1.localはここではフォレスト名)のように見えるオブジェクトのSPNMappings属性によって行われます。 http://msdn.Microsoft.com/en-us/library/cc220898(v = PROT.13).aspx

トリスタンのブログは素晴らしいです。トラブルシューティングブログやその他のKerberos関連のブログも http://blogs.technet.com/b/askds/archive/tags/kerberos/ で役立つ場合があります。

1
maweeras