Странная ошибка GSS-API Java

Я запускаю следующий учебник: http://download.oracle.com/javase/6/docs/technotes/guides/security/jgss/tutorials/BasicClientServer.html

Я получаю следующие подсказки:

Connected to server localhost/127.0.0.1
Kerberos username [login]: {I enter my username here}
Kerberos password for login: {I enter my password here}

Я получаю следующую ошибку:

Можете ли вы установить первопричину этого?

Exception in thread "main" GSSException: No valid credentials provided (Mechanism level: Attempt to obtain new INITIATE credentials failed! (null))
at sun.security.jgss.krb5.Krb5InitCredential.getTgt(Krb5InitCredential.java:333)
at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:128)
at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:106)
at sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechFactory.java:172)
at sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.java:209)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:195)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:162)
at demo.SampleClient.main(SampleClient.java:145)
Caused by: javax.security.auth.login.LoginException: Message stream modified (41)
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:696)
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:542)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
at javax.security.auth.login.LoginContext$5.run(LoginContext.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokeCreatorPriv(LoginContext.java:703)
at javax.security.auth.login.LoginContext.login(LoginContext.java:575)
at sun.security.jgss.GSSUtil.login(GSSUtil.java:246)
at sun.security.jgss.krb5.Krb5Util.getTicket(Krb5Util.java:136)
at sun.security.jgss.krb5.Krb5InitCredential$1.run(Krb5InitCredential.java:328)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.jgss.krb5.Krb5InitCredential.getTgt(Krb5InitCredential.java:325)
... 7 more
Caused by: KrbException: Message stream modified (41)
at sun.security.krb5.KrbKdcRep.check(KrbKdcRep.java:53)
at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:96)
at sun.security.krb5.KrbAsReq.getReply(KrbAsReq.java:449)
at sun.security.krb5.Credentials.sendASRequest(Credentials.java:410)
at sun.security.krb5.Credentials.acquireTGT(Credentials.java:378)
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:662)
... 23 more

person hawkeye    schedule 19.07.2011    source источник


Ответы (3)


У меня были исключения «Изменен поток сообщений (41)», когда область Kerberos не совпадала. Область (в системном свойстве java.security.krb5.realm) должна точно совпадать, включая верхний/нижний регистр.

person hfs    schedule 02.03.2012

Мне интересно, возможно ли это (т.е. даже если ключ реестра установлен, заблокирован для локальных администраторов):

http://cr.openjdk.java.net/~weijun/special/krb5winguide-2/raw_files/new/kwin

Известные вопросы

Если учетная запись AD также добавлена ​​в локальную группу администраторов на клиентском ПК, Microsoft запрещает такому клиенту получать ключ сеанса для билетов (даже если вы установили для ключа реестра allowtgtsessionkey значение 1). Обходной путь: просто забудьте, что вы зарегистрированный пользователь, вызовите kinit.exe. Не зависит от кэша учетных данных LSA.

person hawkeye    schedule 19.07.2011

Я не могу подтвердить эту проблему. У меня есть права администратора на моей машине, и я все еще могу получить ключ сеанса из LSA. Вы должны включить полный вывод отладки на JGSS и Krb5LoginModule. Поделитесь также своими krb5.ini и login.conf. Я надеюсь, вы знаете, что приведенный выше пример не может работать, потому что ваш клиент не может получить билет для локального хоста. Это должно быть полное доменное имя с соответствующим набором SPN в Active Directory.

person Michael-O    schedule 20.07.2011
comment
Из-за вашей подсказки и целевого сервера. Перечитайте мой ответ по причине. - person Michael-O; 21.07.2011
comment
В этом руководстве задается ожидаемый запрос имени пользователя: ›Для этого руководства модуль входа в систему Kerberos com.sun.security.auth.module.Krb5LoginModule указан в файле конфигурации. Этот модуль входа запрашивает имя и пароль Kerberos и пытается пройти аутентификацию в KDC Kerberos. Я рад, что мой целевой сервер неверен, но вы, кажется, предполагаете, что я не должен ожидать подсказки. - person hawkeye; 21.07.2011
comment
Это хорошо, но проще работать с кешем учетных данных. Это то, что я имел в виду. ЛСА в Windows. Выложи все свои конфиги. Это поможет. - person Michael-O; 21.07.2011