Je développe en utilisant GSSAPI, et j'ai du code qui fonctionne avec un serveur Vanilla MIT Kerberos 5 pour faire un travail client/serveur. Je vérifie maintenant sa fonctionnalité par rapport à Active Directory et je 'ai rencontré un problème.
J'ai mon serveur authentifié et à l'écoute. Je peux demander au client de se connecter. Pour mémoire, il s'agit d'un code basé sur http://thejavamonkey.blogspot.com/2008/04/clientserver-hello-world-in-kerberos.html . Cependant, je ne peux pas demander au client de récupérer le ticket d'AD pour obtenir la session entre celui-ci et le serveur. J'obtiens KrbException: serveur introuvable dans la base de données Kerberos (7), et je ne peux pas déterminer où il convient de l'ajouter. J'ai essayé de mettre le nom du serveur avec ip dans le fichier hosts, de mettre à jour le DNS, de mettre les enregistrements du serveur, etc., sans succès.
Si quelqu'un sait où mettre à jour AD pour configurer un serveur dans la base de données Kerberos, ce serait génial!
Cette exception vient du client, non? Veuillez effectuer une recherche DNS avant et arrière du nom d'hôte du serveur. Votre serveur a des entrées DNS incorrectes. Ils sont absolument cruciaux pour Kerberos. L'endroit approprié est votre serveur DNS, dans votre cas: contrôleur de domaine. Déterminez l'adresse IP de votre serveur DNS et contactez votre administrateur. L'autre option est un SPN manquant, veuillez également le vérifier.
J'espère que cela aide .. J'ai reçu ce même message d'erreur (serveur introuvable dans la base de données Kerberos (7)) mais cela se produit après l'utilisation réussie du fichier de clés pour se connecter.
Le message d'erreur se produit lorsque nous tentons d'utiliser les informations d'identification pour effectuer des recherches LDAP sur AD.
Cela ne commence que depuis Java 1.6.0_34 - cela fonctionnait avec 1.6.0_31 qui, je pense, était la version précédente. L'erreur se produit parce que le Java doesn ' Je ne crois pas que le KDC avec lequel il communique pour LDAP fait en fait partie du domaine Kerberos. Dans notre cas, je pense que c'est parce que la connexion LDAP est établie avec le nom du serveur trouvé via la requête résolue à tour de rôle. , Java résout realm.example.com, mais obtient n'importe lequel de kdc1.example.com ou kdc2.example .com ..etc). Ils doivent avoir resserré la vérification entre ces versions.
Dans notre cas, le problème a été résolu en définissant directement le nom du serveur LDAP plutôt qu'en s'appuyant sur DNS.
Mais les enquêtes se poursuivent.
Dans mon cas, cela est dû à une mauvaise configuration de l'adresse du serveur demandé.
L'adresse du serveur doit être un FQDN (nom de domaine complet).
Le nom de domaine complet est toujours requis par Kerberos.
Cela ressemble à un problème SPN manquant. Le site Web que vous avez indiqué
principal="webserver/[email protected]"
C'est le principal pour lequel le billet serait obtenu. Avez-vous changé cela en une valeur relative à votre domaine AD?
Vous pouvez utiliser les outils Kerberos en ligne de commande pour tester si vous avez défini le SPN:
[root@gen-cs218 bin]# kinit Administrator
[email protected]'s Password:
[root@gen-cs218 bin]# kgetcred Host/[email protected]
[root@gen-cs218 bin]# klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: [email protected]
Issued Expires Principal <br>
Dec 15 11:42:34 2012 Dec 15 21:42:34 2012 krbtgt/[email protected]
Dec 15 11:42:48 2012 Dec 15 21:42:34 2012 Host/[email protected]
Les SPN basés sur le nom d'hôte sont prédéfinis. Si vous souhaitez utiliser un SPN qui n'est pas prédéfini, vous devrez le définir explicitement dans AD à l'aide de l'outil setspn.exe et l'associer à un ordinateur ou à un compte d'utilisateur, par exemple:
c:\> setspn.exe -A "webserver/bully@MYDOMAIN" myuser
Vous pouvez vérifier à quel compte un SPN est associé en utilisant la commande ci-dessous. Cela n'affichera pas les SPN prédéfinis.
c:\> setspn.exe -L "webserver/bully@MYDOMAIN"
L'erreur "Serveur introuvable dans la base de données Kerberos" peut se produire si vous avez enregistré le SPN auprès de plusieurs utilisateurs/ordinateurs.
Vous pouvez vérifier cela avec:
$ SetSPN -Q ServicePrincipalName
( SetSPN -Q HTTP/my.server.local@MYDOMAIN )
sqlcmd fonctionne, System.Data.SqlClient ne fonctionne pas - Serveur introuvable dans la base de données Kerberos. Vous devez ajouter RestrictedKrbHost SPN
5.1.2 SPN avec Serviceclass égal à "RestrictedKrbHost"
La prise en charge de la classe de service "RestrictedKrbHost" permet aux applications clientes d'utiliser l'authentification Kerberos lorsqu'elles n'ont pas l'identité du service mais ont le nom du serveur. Cela ne fournit pas l'authentification mutuelle client-service, mais plutôt l'authentification ordinateur client-serveur. Les services de différents niveaux de privilèges ont la même clé de session et pourraient déchiffrer les données les uns des autres si le service sous-jacent ne garantit pas que les données ne sont pas accessibles par des services supérieurs.
Dans mon cas, mon mandant était kafka/[email protected]
Je suis arrivé en dessous des lignes dans le terminal:
>>> KrbKdcReq send: #bytes read=190
>>> KdcAccessibility: remove kerberos.niroshan.com
>>> KDCRep: init() encoding tag is 126 req type is 13
>>>KRBError:
cTime is Thu Oct 05 03:42:15 UTC 1995 812864535000
sTime is Fri May 31 06:43:38 UTC 2019 1559285018000
suSec is 111309
error code is 7
error Message is Server not found in Kerberos database
cname is kafka/[email protected]
sname is kafka/[email protected]
msgType is 30
Après des heures de vérification, je viens de découvrir que la ligne ci-dessous a une mauvaise valeur dans kafka_2.12-2.2.0/server.properties
listeners=SASL_PLAINTEXT://kafka.com:9092
J'ai également reçu deux entrées de kafka.niroshan.com
et kafka.com
pour la même adresse IP.
Je l'ai changé en listeners=SASL_PLAINTEXT://kafka.niroshan.com:9092
Alors ça a marché!
Selon le lien ci-dessous, le principal doit contenir le nom de domaine complet (FQDN) de chaque hôte et il doit être mis en correspondance avec le principal.
https://docs.Oracle.com/cd/E19253-01/816-4557/planning-25/index.html