Spring webapp で Kerberos/AD 認証を機能させるのに問題があります。この問題は、Kerberos チケットの暗号化タイプと Active Directory ドメインの機能レベルに関係していると思います。
基本的なセットアップは次のとおりです。
- トムキャット7
- ジャワ 1.6 (29)
- Windows Server 2008 R2
- 春 3.0
- Spring Security Kerberos/Spnego 拡張 M2 の詳細はこちら: http://blog.springsource.com/2009/09/28/spring-security-kerberos/
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側で修正することをお勧めします。