Ошибка: Java GSS-API с SPNEGO: сервер не найден в базе данных Kerberos (7)

Я пытаюсь заставить это руководство работать: https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part5.html

Я запускаю Kerberos KDC на виртуальной машине и использую это руководство для его настройки: http://techpubs.spinlocksolutions.com/dklar/kerberos.html

Я настроил два принципала: [email protected] и host/[email protected], а ключ для второго сохранен в таблице ключей, которую я скопировал с виртуальной машины на свою тестовую машину.

Я могу пропинговать KDC и получить билеты с помощью kinit.

Я скомпилировал все примеры кода (Jaas.java GssSpNegoServer.java и GssSpNegoClient.java) без изменений из туториала.

Это мой jaas-krb5.conf:

client {
com.sun.security.auth.module.Krb5LoginModule required
principal="jessica";
};

server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab=krb5.keytab
principal="host/jessica-ThinkPad-X220";
};

Я запускаю сервер с java -Djava.security.auth.login.config=jaas-krb5.conf GssSpNegoServer

Затем в другом окне я запускаю клиент с java -Djava.security.auth.login.config=jaas-krb5.conf GssSpNegoClient host hostname, что дает мне следующую ошибку:

$ java -Djava.security.auth.login.config=jaas-krb5.conf GssSpNegoClient host jessica-ThinkPad-X220
Kerberos-Password for jessica: 
Authenticated principal: [[email protected]]
Connected to address jessica-ThinkPad-X220/192.168.178.78
Exception in thread "main" java.security.PrivilegedActionException: GSSException: No valid credentials provided (Mechanism level: No valid  credentials provided (Mechanism level: Server not found in Kerberos database (7) - LOOKING_UP_SERVER))
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at Jaas.loginAndAction(Jaas.java:53)
at GssSpNegoClient.main(GssSpNegoClient.java:56)
Caused by: GSSException: No valid credentials provided (Mechanism level: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - LOOKING_UP_SERVER))
at sun.security.jgss.spnego.SpNegoContext.initSecContext(SpNegoContext.java:454)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:248)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
at GssSpNegoClient$GssClientAction.run(GssSpNegoClient.java:129)
... 4 more
Caused by: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - LOOKING_UP_SERVER)
at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:770)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:248)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
at sun.security.jgss.spnego.SpNegoContext.GSS_initSecContext(SpNegoContext.java:882)
at sun.security.jgss.spnego.SpNegoContext.initSecContext(SpNegoContext.java:317)
... 7 more
Caused by: KrbException: Server not found in Kerberos database (7) - LOOKING_UP_SERVER
at sun.security.krb5.KrbTgsRep.<init>(KrbTgsRep.java:73)
at sun.security.krb5.KrbTgsReq.getReply(KrbTgsReq.java:259)
at sun.security.krb5.KrbTgsReq.sendAndGetCreds(KrbTgsReq.java:270)
at sun.security.krb5.internal.CredentialsUtil.serviceCreds(CredentialsUtil.java:302)
at sun.security.krb5.internal.CredentialsUtil.acquireServiceCreds(CredentialsUtil.java:120)
at sun.security.krb5.Credentials.acquireServiceCreds(Credentials.java:458)
at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:693)
... 11 more
Caused by: KrbException: Identifier doesn't match expected value (906)
at sun.security.krb5.internal.KDCRep.init(KDCRep.java:140)
at sun.security.krb5.internal.TGSRep.init(TGSRep.java:65)
at sun.security.krb5.internal.TGSRep.<init>(TGSRep.java:60)
at sun.security.krb5.KrbTgsRep.<init>(KrbTgsRep.java:55)
... 17 more

Я не знаю, что я делаю неправильно, кто-нибудь может помочь?


person J. Horn    schedule 30.05.2016    source источник
comment
Даже если вы не используете Hadoop, вы можете прочитать вдохновляющую книгу Hadoop и Kerberos — безумие за вратами и конкретно эту страницу: steveloughran.gitbooks.io/kerberos_and_hadoop/content/sections/   -  person Samson Scharfrichter    schedule 30.05.2016
comment
Я не думаю, что host/ является действительным префиксом принципа, по крайней мере, большинство аутентификаторов SPNEGO-over-HTTP не будут действовать так. Принцип сервера должен начинаться с HTTP/, например. HTTP/myserver.mydomain.com@REALM. Я нашел это сообщение в связи с проблемой HTTPCLIENT-1712 — прочитайте комментарии к проблеме Чтобы получить больше информации. Ваше исключение, возможно, означает, что такой принцип не найден в KDC, потому что HTTP-клиент будет запрашивать билет для принципа в стандартном формате, который я упомянул выше.   -  person dma_k    schedule 31.05.2017


Ответы (1)


Сначала проверьте, какой сервер он ищет в журналах Kerberos (у меня он находится в /var/log/auth.log). Там вы увидите соответствующий лог:

krb5kdc[5157]: TGS_REQ (3 etypes {18 17 16}) x.x.x.x: LOOKING_UP_SERVER: authtime 0,  ex/admin@EXAMPLE for ex2/y.y.y.y@EXAMPLE, Server not found in Kerberos database

Обязательно измените y.y.y.y на имя хоста соответствующей системы, а также добавьте имя хоста в список хостов (например, /etc/hosts)

person The UMA    schedule 07.03.2021