2010-09-28 17 views
0

Je voudrais comparer une chaîne au mot de passe de l'utilisateur actuellement authentifié (comparaison de clés cryptées). Il semble que récupérer le mot de passe du cache des tickets, mais comment puis-je faire cela?Java et Kerberos

Merci

Répondre

0

Je ne sais pas si cela est destiné à être possible. Ce hash peut être salé avec une clé connue uniquement du serveur. Ce que j'essaierais plutôt, c'est de simplement m'authentifier en utilisant l'identifiant de l'utilisateur et la chaîne donnée. Si le serveur accepte la demande d'authentification, le mot de passe était valide.

+0

Merci pour votre réponse. Je ne peux pas appliquer votre solution car l'utilisateur est déjà authentifié. Afin de le laisser changer son mot de passe kerberos, je dois vérifier son identité en lui demandant son ancien mot de passe. Ensuite, je dois comparer l'entrée au vrai mot de passe. – BigMac

1

Il n'est pas possible de récupérer le mot de passe à partir d'informations disponibles sur le client ou n'importe où dans un système kerberos. Selon le kerberos article in wikipedia (qui contient des informations similaires à ce que je lis à d'autres sources) l'utilisateur entré mot de passe est haché avec une fonction à sens unique dans quelque chose qui sert de secret à partir de ce point. Le secret est disponible au centre de distribution de clés (KDC) et le ticket d'octroi de ticket (TGT) est chiffré symétriquement avec ce secret. Pour recevoir et utiliser le TGT, un client doit fournir le secret pour déchiffrer le paquet - ce qui est fait en demandant le mot de passe de l'utilisateur. Après cela, le TGT est décrypté et sauvegardé dans le cache des tickets.

Le TGT lui-même a des parties cryptées avec un secret que seul le kdc connaît, il ne détient pas le mot de passe de l'utilisateur. Comme, par exemple, this article from 2000 explique, le mot de passe n'est pas stocké dans le cache des tickets - seulement des parties du TGT. D'après ce que je comprends, il n'est pas possible de vérifier le mot de passe de l'utilisateur en utilisant le cache des tickets.

Vous voudrez peut-être écrire le vôtre CallbackHandler pour réutiliser ou fournir les informations d'identification par programmation, mais d'après ce que je comprends, cela peut entraîner des problèmes de sécurité.

Vous pourriez envisager de résoudre votre problème avec une approche totalement différente, mais il y a peu d'informations pour suggérer une autre solution.

+0

Merci MaoPU pour cette excellente réponse. Effectivement, il semble impossible de récupérer le mot de passe de l'utilisateur à partir de la base de données Kerberos. Afin d'éviter les fuites de sécurité, je vais plutôt appeler un script shell qui exécute la vérification et la modification du mot de passe. – BigMac

+0

Ceci est correct. Les informations de mot de passe sont privées au KDC et ne sont pas récupérables par programme depuis l'extérieur du KDC au moment de l'exécution. Ce serait un trou de sécurité énorme autrement. –