0

私は、私のソフトウェアのSSO(Kerberosを使用して)を設定するよう顧客に手伝っている間に問題に遭遇しました。Kerberos:クロスドメイン/レルムの問題

しかし、最初のはあなたにいくつかのコンテキスト与えてみましょう:あなたは私たちは、クロスドメイン/レルムKerberosをやりたいと我々は、4つの異なる(Active Directoryを持って貼らkrb5.iniで見ることができるように

を、すべて2008 R2フォレストを持っています/ドメイン機能レベル)ドメイン。明らかtest.localの子ドメインである

1)test.local 2)subdomain.test.local()3)example.local 4)dummy.local

双方向の推移的な信頼がありました( test.localとexample.localの間、test.localとexample.localの間に設定します。

そして、(もちろん)test.localとsubdomain.test.localの間にデフォルトの信頼があります。

[libdefaults] 
default_realm = TEST.LOCAL 
default_tkt_enctypes = rc4-hmac aes128-cts aes256-cts des-cbc-crc des-cbc-md5 
default_tgs_enctypes = rc4-hmac aes128-cts aes256-cts des-cbc-crc des-cbc-md5 
permitted_enctypes = rc4-hmac aes128-cts aes256-cts des-cbc-crc des-cbc-md5 
[realms] 
TEST.LOCAL = { 
    kdc = dc001.TEST.local 
    kdc = dc002.TEST.local 
} 
EXAMPLE.LOCAL = { 
    kdc = dc001.example.local 
    kdc = dc002.example.local 
} 
SUBDOMAIN.TEST.LOCAL = { 
    kdc = dc001.SUBDOMAIN.TEST.local 
    kdc = dc002.SUBDOMAIN.TEST.local 
} 
DUMMY.LOCAL = { 
    kdc = dc001.dummy.local 
    kdc = dc002.dummy.local 
} 
[domain_realm] 
test.local=TEST.LOCAL 
.test.local=TEST.LOCAL 
example.local=EXAMPLE.LOCAL 
.example.local=EXAMPLE.LOCAL 
dummy.local=DUMMY.LOCAL 
.dummy.local=DUMMY.LOCAL 
subdomain.test.local=SUBDOMAIN.TEST.LOCAL 
.subdomain.test.local=SUBDOMAIN.TEST.LOCAL 

クロスドメインの名前解決がうまくいきます。

WebサーバーはLinuxボックスです(RedHatまたはCentOSのインストールが正しく行われたことを覚えている場合)。 fqdnはweb001.test.localです。

クライアントは、ローカルイントラネットゾーンのメンバーとしてfqdn web001.test.localを処理します(メンバーであるドメインとは別に)。

ウェブサーバー用のサービスユーザーと対応するキータブファイルを正常に作成しました。

我々はtest.local照会し、我々は正しい応答を得るSPNを検索する場合:その後

<service user)> 
HTTP/[email protected] 
HTTP/web001.test.local 
HTTP/web001 

我々はテストを開始し、ユーザーがtest.localまたはサブドメインのメンバーである場合はKerberosは(うまく働いていました.test.local)dummy.localとexample.localからテストユーザーとログインしようとしました。

ユーザーは、我々は、以下のスタックトレースを取得し、これらの特定のドメインからログインしようとするたびに:

09:44:25.447 WARN REQUEST[10.50.50.45] 
o.s.s.k.w.a.SpnegoAuthenticationProcessingFilter - Negotiate Header was 
invalid: Negotiate YIIJ... 
org.springframework.security.authentication.BadCredentialsException: 
Kerberos validation not successful 

Caused by: java.security.PrivilegedActionException: null 

Caused by: sun.security.krb5.KrbCryptoException: Checksum failed 

Caused by: java.security.GeneralSecurityException: Checksum failed 

私が前に言ったように:Kerberosはtest.localとsubdomain.test内のクライアント/ユーザで動作します。ローカル領域/ドメイン。

しかし、他のドメイン/領域ではうまくいかない理由はありません。

誰かが私を啓発することができますか、少なくとも私にヒントを教えてもらえますか?

ありがとうございます。

P.S.デバッグ/応答について:私は、顧客ドメイン(アクティブディレクトリ)とウェブサーバに直接アクセスすることはできません。デバッグや回答への応答に数日かかることがあります。

+1

example.localドメインのクライアントにHTTP/web001.test.localのサービスチケットがあることを確認しましたか? example.localのKDCは、このようなサービスチケットを発行できません。代わりに、example.localのKDCは、KDC test.localを使用してそのようなサービスチケットを取得するようにクライアントに指示する必要があります。 https://technet.microsoft.com/en-us/library/bb742516.aspx –

+0

私は個人的にそれをチェックしていません。しかし、私は顧客にそれを確認するように求めるでしょう。しかし、私が知る限り、example.localのKDCはサービスチケットを発行します。しかし、クライアントに直接ではなく、代わりにtest.localのサービスチケット(トラスト経由)に「クロスサイン」してください(https://adsecurity.org/?p=1588; 2番目の画像)。しかし、私の主な関心事は、なぜこれがtest.localだけでなく、subdomain.test.localでも動作するのか、他の2つのドメインでは動作しないのか分かりません。だから違いがあります。 – hlpinform

+0

あなたが参照したリンクはセキュリティ違反であり、正しい方法では動作しません –

答えて

1

問題は信頼の設定でした。前に述べたように、それは双方向推移的な信頼でした。悲しいことに、子供(子供のドメインを除く)も子供も森林の信頼もありませんでした。それは外部の信頼だった。このようにして、ケルベロスのアクティブな名前のルーティング規則はありませんでした。

私はこの記事(https://jorgequestforknowledge.wordpress.com/2011/09/14/kerberos-authentication-over-an-external-trust-is-it-possible-part-6/)を見つけ、GPO経由で手動でルーティングを設定しました。これはトリックでした。

私は彼の質問で正しい方向に私を指摘したBernhardに感謝します。

関連する問題