10

Spring webapp で Kerberos/AD 認証を機能させるのに問題があります。この問題は、Kerberos チケットの暗号化タイプと Active Directory ドメインの機能レベルに関係していると思います。

基本的なセットアップは次のとおりです。

Active Directory ドメインの機能レベルが Windows Server 2003 である環境が 1 つあります。クライアントがドメインにログオンしている場合、クライアントは期待どおりに認証され、すべてが正常に動作します。この環境で kerbtray を使用してチケットを調べると、すべてのチケット暗号化タイプとキー暗号化タイプ「RSADSI RC4-HMAC」の両方があることがわかります。

機能レベルが Windows Server 2008 の新しいドメインがありますが、ここで認証が機能しません。チケットを検証しようとしたときに返されるアプリケーション エラーは次のとおりです。

Kerberos validation not successful...

Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
    at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Unknown Source)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(Unknown Source)
    at sun.security.jgss.spnego.SpNegoContext.acceptSecContext(Unknown Source)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:146)
    at org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:136)
    ... 34 more
Caused by: KrbException: Checksum failed
    at sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(Unknown Source)
    at sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(Unknown Source)
    at sun.security.krb5.EncryptedData.decrypt(Unknown Source)
    at sun.security.krb5.KrbApReq.authenticate(Unknown Source)
    at sun.security.krb5.KrbApReq.<init>(Unknown Source)
    at sun.security.jgss.krb5.InitSecContextToken.<init>(Unknown Source)
    ... 43 more
Caused by: java.security.GeneralSecurityException: Checksum failed
    at sun.security.krb5.internal.crypto.dk.ArcFourCrypto.decrypt(Unknown Source)
    at sun.security.krb5.internal.crypto.ArcFourHmac.decrypt(Unknown Source)

スタック トレースは「ArcfourCrypto.decrypt」を示しているため、おそらく Kerberos チケットを RC4-HMAC として扱っています。再び kerbtray を使用してチケットを調べると、今度はクライアントにドメイン krbtgt/.COM の 2 つのチケットがあります。両方のチケットのキー暗号化タイプは RSADS1 RC4-HMAC で、1 つはチケット暗号化タイプにもこれがありますが、もう 1 つは「Kerberos AES256-CTS-HMAC-SHA1-96」です。

これが問題の原因であるかどうかはわかりませんが、認証例外を説明する可能性のある 2 つの環境で見つけることができた唯一の違いです。AD の暗号化ポリシーを変更してみたり、IE や Firefox を試したり、他に考えられるほとんどすべてのことを試しましたが、何も機能しませんでした。

これに対処するための助けをいただければ幸いです。プロダクションADのセットアップについてあまり指示できないので、Java側で修正することをお勧めします。

4

2 に答える 2

0

問題は、トークンの生成方法とサーバー側での検証方法にあります。例外トレースから、クライアント側がチェックサムを設定しておらず、サーバー側がチェックサムを検証しようとしていることが問題であることを示しています。チェックサムは、トークンに設定された params 値の 1 つであり、明らかな意味を持ちます。

2008 年には、この機能を無効にしてチェックサム チェックを無視する方法が必要です。しかし、別のドアが開くため、残存リスクを評価する必要がある場合があります。

于 2012-01-10T20:18:01.327 に答える