2012-03-02 38 views
5

Tôi đang chuyển từ Java 6 sang Java 7 và đang gặp sự cố với xác thực Kerberos. Có vẻ với tôi rằng thứ tự kiểu mã hóa cơ bản được chuyển đổi và kết quả là một loại mã hóa khác được sử dụng. Trong trường hợp này, Aes128CtsHmacSha1EType đang được sử dụng cho một phần của giao dịch khi chạy Java 7. ArcFourHmacEType được sử dụng khi Java 6 chạy và cho phần khác của Java 7 chạy.Vấn đề về Kerberos Java 7 - AES128 Kiểm tra lỗi

Chi tiết khác: chạy trên Linux (Fedora 16) dựa trên máy chủ Windows Active Directory.

Tôi biết tôi có thể xác thực để hoạt động nếu tôi đặt các tham số default_tkt_enctypes, default_tgs_enctypes, allowed_enctypes trong tệp krb5.conf; tuy nhiên, tôi muốn làm cho nó hoạt động mà không cần phải có tệp nào cả và lý tưởng nhất mà không phải ép buộc một hoặc hai loại mã.

Dưới đây là thông báo lỗi Tôi nhận:

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 

Có thể sử dụng AES128 với thiết lập này?

Nếu tôi không thể làm cho AES128 hoạt động, có cách nào để đặt các kiểu mã mặc định thông qua tham số hệ thống (thay vì sử dụng krb5.conf) không?

+1

Bạn đã cài đặt JAR bảo mật không giới hạn? –

+0

Đừng nghĩ rằng bạn nên cần nó cho AES 128-bit, chỉ cho AES 256-bit, nếu tôi nhớ chính xác. – rra

+0

Java ném một ngoại lệ khóa bất hợp pháp thường khi bạn cần JCE nhưng không cài đặt nó đúng cách. –

Trả lời

0

Nghe James Cape, cài đặt tệp bảo mật không giới hạn. Do thẩm quyền của Hoa Kỳ, JRE không thể được vận chuyển bằng JAR đó.

Các vấn đề liên quan