de contrôle ont échoué: Kerberos / Printemps / Active Directory (2008)
Nous rencontrez des difficultés à obtenir Kerberos/authentification AD de travailler avec un Printemps webapp, et je crois que le problème a à voir avec les types de chiffrement pour les tickets Kerberos et l'Active Directory niveau fonctionnel du domaine.
La configuration de base est:
- Tomcat 7
- Java 1.6 (29)
- Windows Server 2008 R2
- Printemps 3.0
- Printemps de Sécurité Kerberos/Spnego extension M2 détaillé ici: http://blog.springsource.com/2009/09/28/spring-security-kerberos/
J'ai un environnement où l'Active Directory niveau fonctionnel de domaine Windows Server 2003 et tout fonctionne bien, avec des clients de l'authentifier comme prévu, s'ils sont enregistrés sur le domaine. À l'aide de kerbtray pour examiner les billets dans cet environnement, je peux voir qu'ils ont tous les deux billets du type de chiffrement et la clé de chiffrement de type "RSADSI RC4-HMAC".
J'ai un nouveau domaine avec le niveau fonctionnel Windows Server 2008, et c'est là que l'authentification ne fonctionne pas. La demande de retour d'erreur lorsque vous tentez de valider le billet est:
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)
La trace de la pile de montre "ArcfourCrypto.décrypter" donc, vraisemblablement, est de traiter le ticket Kerberos comme RC4-HMAC. À l'aide de kerbtray à nouveau pour examiner les billets de ce temps, il ya 2 billets sur le client pour le domaine: krbtgt/.COM. Les deux billets ont la clé de chiffrement de type RSADS1 RC4-HMAC, on a aussi cette pour billet type de cryptage, mais l'autre a "Kerberos AES256-CTS-HMAC-SHA1-96".
Je ne sais pas pour sûr que c'est la cause du problème, mais c'est la seule différence que j'ai pu trouver dans les deux environnements qui pourrait expliquer l'authentification de l'exception. J'ai essayé de changer l'ANNONCE politique de chiffrement, essayé IE et Firefox, et à peu près tout ce que je pouvais penser, mais rien n'a fonctionné.
Tout, contribuer à résoudre ce serait bien apprécié. Je préfère pour le fixer sur le java fin comme je l'ai probablement ne peut pas imposer trop de choses à propos de la production d'ANNONCE de l'installation.
Merci @Michael-O - j'ai fait d'utiliser Wireshark en travaillant sur cette plus tôt, mais n'ont pas la sortie plus disponible.Je n'ai pas pu obtenir que cela fonctionne à tous - je revenue sur le domaine de test de niveau fonctionnel Windows Server 2003, puis il a travaillé normalement. Maintenant j'ai besoin de la configuration d'une nouvelle 2008 domaine de test pour essayer de trouver une solution viable....
OriginalL'auteur slt | 2011-12-14
Vous devez vous connecter pour publier un commentaire.
Le problème semble être dans le fichier keytab. Il ya quelques séquences d'action conduisant à certains fichier keytab états:
(A) keytab fonctionne avec Java, mais ne fonctionne pas avec k5start/kinit;
(B) le fichier keytab ne fonctionne pas avec Java, mais fonctionne avec k5start/kinit;
(C) keytab fonctionne à la fois avec eux.
Court code Java qui permet de vérifier si Java peut s'authentifier en utilisant le fichier keytab:
et le fichier de propriétés utilisation:
(Ci-dessous, nous supposons que rcond/kdc est correctement installé et configuré, la base de données est créé avec kdb5_util. L'état de départ de chaque séquence de commande est: le fichier keytab supprimé, jeton de cache est supprimé, l'utilisateur "toto" est supprimé de la base de données.)
L'action suivante de la séquence conduit à la keytab de l'état (A):
L'action suivante de la séquence conduit à la keytab état (B):
Mais le "k5start foo" est bien dans cet état, ainsi que "kinit foo".
Et l'action suivante de la séquence conduit à l'état (C):
après que les deux k5start/kinit et la java de vérification de donner de résultat positif.
Environnement:
Également le même comportement observé avec Java 7.
Également le même comportement a été observé sur Ubuntu precise (12.04.1 LTS) avec de MIT kerberos 5-1.10.3 compilé à partir des sources de la distribution.
Je suis en mesure de récupérer le billet de fichier keytab. Cependant, avec Java 7 du code, cette rupture brutale avec la somme de contrôle d'erreur échec. Est recréer le fichier keytab, la seule option?
OriginalL'auteur Ivan Veselovsky
Le problème vient de la manière dont jeton est généré vs comment il est validé sur le côté serveur. De l'exception de trace, il montre le problème est, côté client n'est pas le réglage de la somme de contrôle côté serveur et est à la recherche pour valider la somme de contrôle. La somme de contrôle est l'un des params valeur définie dans le jeton qui a sa signification évidente.
Il doit y avoir moyen en 2008 pour désactiver cette fonction pour ignorer vérifier la somme de contrôle. Mais ouvre une autre porte et vous pouvez avoir besoin pour évaluer le risque résiduel.
OriginalL'auteur tkar