Java 7 Kerberos问题-AES128校验和损坏

Java 7 Kerberos问题-AES128校验和损坏,java,linux,active-directory,aes,kerberos,Java,Linux,Active Directory,Aes,Kerberos,我正在从Java6迁移到Java7,并且遇到了Kerberos身份验证问题。在我看来,底层加密类型顺序被切换,因此使用了不同的加密类型。在这种情况下,当运行Java 7时,Aes128CtsHmacSha1EType用于部分事务ArcFourHmacEType在运行Java 6时使用,在运行Java 7的其他部分时使用 其他详细信息:在Linux(Fedora16)上针对Windows Active Directory服务器运行 我知道,如果我在krb5.conf文件中设置默认的\u tkt\u

我正在从Java6迁移到Java7,并且遇到了Kerberos身份验证问题。在我看来,底层加密类型顺序被切换,因此使用了不同的加密类型。在这种情况下,当运行Java 7时,Aes128CtsHmacSha1EType用于部分事务<代码>ArcFourHmacEType在运行Java 6时使用,在运行Java 7的其他部分时使用

其他详细信息:在Linux(Fedora16)上针对Windows Active Directory服务器运行

我知道,如果我在krb5.conf文件中设置默认的\u tkt\u enctypes、默认的\u tgs\u enctypes、允许的\u enctypes参数,我可以让身份验证工作;然而,我想让它在没有任何文件的情况下工作,理想情况下不必强制使用一个或两个enctype

以下是我收到的错误消息:

java.security.PrivilegedActionException: javax.naming.AuthenticationException: GSSAPI [Root exception is javax.security.sasl.SaslException: Final handshake failed [Caused by GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)]]
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at *internal.code*.LDAPAuthenticator.authenticate(LDAPAuthenticator.java:46)
at *internal.code*.LDAPAuthenticatorTest.testUpdateUser(LDAPAuthenticatorTest.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at junit.textui.TestRunner.doRun(TestRunner.java:116)
at com.intellij.junit3.JUnit3IdeaTestRunner.doRun(JUnit3IdeaTestRunner.java:139)
at junit.textui.TestRunner.doRun(TestRunner.java:109)
at com.intellij.junit3.JUnit3IdeaTestRunner.startRunnerWithArgs(JUnit3IdeaTestRunner.java:52)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:182)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: javax.naming.AuthenticationException: GSSAPI [Root exception is javax.security.sasl.SaslException: Final handshake failed [Caused by GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)]]
at com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:168)
at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:232)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2740)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:316)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:211)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.init(InitialContext.java:242)
at javax.naming.InitialContext.<init>(InitialContext.java:216)
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:101)
at *internal.code*.LDAPAuthenticator.getAttributeFor(LDAPAuthenticator.java:156)
at *internal.code*.user.LDAPAuthenticator.access$000(LDAPAuthenticator.java:27)
at *internal.code*.user.LDAPAuthenticator$1.run(LDAPAuthenticator.java:49)
... 27 more
Caused by: javax.security.sasl.SaslException: Final handshake failed [Caused by GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)]
at com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:328)
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:187)
at com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:132)
... 42 more
Caused by: GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)
at sun.security.jgss.krb5.WrapToken_v2.getData(WrapToken_v2.java:151)
at sun.security.jgss.krb5.WrapToken_v2.getData(WrapToken_v2.java:105)
at sun.security.jgss.krb5.Krb5Context.unwrap(Krb5Context.java:983)
at sun.security.jgss.GSSContextImpl.unwrap(GSSContextImpl.java:403)
at com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:234)
... 44 more
java.security.PrivilegedActionException:javax.naming.AuthenticationException:GSSAPI[根异常为javax.security.sasl.saslexeption:最终握手失败[由gssexException引起:令牌具有无效的完整性检查(机制级别:包装令牌中的校验和损坏)]]
位于java.security.AccessController.doPrivileged(本机方法)
位于javax.security.auth.Subject.doAs(Subject.java:415)
at*internal.code*.LDAPAuthenticator.authenticate(LDAPAuthenticator.java:46)
在*internal.code*.ldapaauthenticatortest.testUpdateUser(ldapaauthenticatortest.java:30)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于junit.framework.TestCase.runTest(TestCase.java:154)
位于junit.framework.TestCase.runBare(TestCase.java:127)
位于junit.framework.TestResult$1.protect(TestResult.java:106)
位于junit.framework.TestResult.runProtected(TestResult.java:124)
运行(TestResult.java:109)
运行(TestCase.java:118)
位于junit.framework.TestSuite.runTest(TestSuite.java:208)
运行(TestSuite.java:203)
位于junit.textui.TestRunner.doRun(TestRunner.java:116)
位于com.intellij.junit3.JUnit3IdeaTestRunner.doRun(JUnit3IdeaTestRunner.java:139)
位于junit.textui.TestRunner.doRun(TestRunner.java:109)
位于com.intellij.junit3.JUnit3IdeaTestRunner.startRunnerWithArgs(JUnit3IdeaTestRunner.java:52)
位于com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:182)
位于com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
原因:javax.naming.AuthenticationException:GSSAPI[根异常为javax.security.sasl.SaslException:最终握手失败[原因:GSSException:令牌具有无效的完整性检查(机制级别:包装令牌中的校验和损坏)]]
位于com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:168)
位于com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:232)
位于com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2740)
位于com.sun.jndi.ldap.LdapCtx(LdapCtx.java:316)
位于com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
位于com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:211)
位于com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154)
位于com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84)
位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
位于javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
位于javax.naming.InitialContext.init(InitialContext.java:242)
位于javax.naming.InitialContext。(InitialContext.java:216)
位于javax.naming.directory.InitialDirContext。(InitialDirContext.java:101)
位于*internal.code*.LDAPAuthenticator.getAttributeFor(LDAPAuthenticator.java:156)
在*internal.code*.user.LDAPAuthenticator.access$000(LDAPAuthenticator.java:27)
在*internal.code*.user.LDAPAuthenticator$1.run(LDAPAuthenticator.java:49)
... 还有27个
原因:javax.security.sasl.SaslException:最终握手失败[原因:GSSException:令牌的完整性检查无效(机制级别:包装令牌中的校验和损坏)]
位于com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:328)
位于com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:187)
位于com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:132)
... 42多
原因:GSSExException:令牌的完整性检查无效(机制级别:包装令牌中的校验和损坏)
位于sun.security.jgss.krb5.WrapToken_v2.getData(WrapToken_v2.java:151)
位于sun.security.jgss.krb5.WrapToken_v2.getData(WrapToken_v2.java:105)
位于sun.security.jgss.krb5.Krb5Context.unwrap(Krb5Context.java:983)
位于sun.security.jgss.GSSContextImpl.unwrap(GSSContextImpl.java:403)
位于com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:234)
... 44多
是否可以将AES128与此设置一起使用


如果我无法让AES128正常工作,有没有办法通过系统参数(而不是使用krb5.conf)设置默认enctypes?

听James Cape的话,安装无限制安全文件。由于美国的管辖权,JRE不能与该JAR一起装运。

您是否安装了无限制安全JAR?如果我没记错的话,您不认为128位AES需要它,而256位AES需要它。Java通常在您需要JCE但没有正确安装JCE时抛出非法密钥大小异常。