私は、私のソフトウェアの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.デバッグ/応答について:私は、顧客ドメイン(アクティブディレクトリ)とウェブサーバに直接アクセスすることはできません。デバッグや回答への応答に数日かかることがあります。
example.localドメインのクライアントにHTTP/web001.test.localのサービスチケットがあることを確認しましたか? example.localのKDCは、このようなサービスチケットを発行できません。代わりに、example.localのKDCは、KDC test.localを使用してそのようなサービスチケットを取得するようにクライアントに指示する必要があります。 https://technet.microsoft.com/en-us/library/bb742516.aspx –
私は個人的にそれをチェックしていません。しかし、私は顧客にそれを確認するように求めるでしょう。しかし、私が知る限り、example.localのKDCはサービスチケットを発行します。しかし、クライアントに直接ではなく、代わりにtest.localのサービスチケット(トラスト経由)に「クロスサイン」してください(https://adsecurity.org/?p=1588; 2番目の画像)。しかし、私の主な関心事は、なぜこれがtest.localだけでなく、subdomain.test.localでも動作するのか、他の2つのドメインでは動作しないのか分かりません。だから違いがあります。 – hlpinform
あなたが参照したリンクはセキュリティ違反であり、正しい方法では動作しません –