12

そのため、認証でうまく機能することを確認するためにテストしているコードがいくつかあります。ストレート kerberos に対しては問題なく動作するため、AD ではわずかな問題が発生するだけであると考えました。残念ながら、KrbException: KDC has no support for encryption type (14) を回避できません。

エラーが暗号化タイプの不一致であることはわかっています。問題が発生したのはコードだけです。私は何も設定していないので、kinit と同じデフォルトを継承する必要があると思いますが、明らかにそうではありません。

コード-

System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("java.security.krb5.realm", "TEST.SQRRL.COM");
System.setProperty("java.security.krb5.kdc", "172.16.101.128");
System.setProperty("java.security.auth.login.config", "./conf/jaas.conf");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "true");

// "Client" references the JAAS configuration in the jaas.conf file.
LoginContext loginCtx = null;
loginCtx = new LoginContext("Server", new LoginCallbackHandler("test".toCharArray()));
loginCtx.login();
subject = loginCtx.getSubject();

および jaas.conf

Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=false
storeKey=true
useTicketCache=true
principal="accumulo@test.SQRRL.COM";
};

そして、スタックトレース-

>>>KRBError:
     sTime is Tue Nov 27 18:16:36 EST 2012 1354058196000
     suSec is 257213
     error code is 14
     error Message is KDC has no support for encryption type
     realm is test.SQRRL.COM
     sname is krbtgt/test.SQRRL.COM
     msgType is 30
javax.security.auth.login.LoginException: KDC has no support for encryption type (14)
    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$4.run(LoginContext.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
    at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
    at authenticators.KerberosAuthenticator.<init>(KerberosAuthenticator.java:37)
    at main.ServerImpl.<init>(ServerImpl.java:91)
    at main.PlugServer.run(PlugServer.java:22)
    at main.PlugServer.main(PlugServer.java:42)
Caused by: KrbException: KDC has no support for encryption type (14)
    at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:66)
    at sun.security.krb5.KrbAsReq.getReply(KrbAsReq.java:446)
    at sun.security.krb5.Credentials.sendASRequest(Credentials.java:401)
    at sun.security.krb5.Credentials.acquireTGT(Credentials.java:373)
    at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:662)
    ... 15 more
Caused by: KrbException: Identifier doesn't match expected value (906)
    at sun.security.krb5.internal.KDCRep.init(KDCRep.java:133)
    at sun.security.krb5.internal.ASRep.init(ASRep.java:58)
    at sun.security.krb5.internal.ASRep.<init>(ASRep.java:53)
    at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:50)
    ... 19 more
Exception in thread "main" java.lang.RuntimeException: javax.security.auth.login.LoginException: KDC has no support for encryption type (14)
    at main.PlugServer.run(PlugServer.java:36)
    at main.PlugServer.main(PlugServer.java:42)
Caused by: javax.security.auth.login.LoginException: KDC has no support for encryption type (14)
    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$4.run(LoginContext.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
    at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
    at authenticators.KerberosAuthenticator.<init>(KerberosAuthenticator.java:37)
    at main.ServerImpl.<init>(ServerImpl.java:91)
    at main.PlugServer.run(PlugServer.java:22)
    ... 1 more
Caused by: KrbException: KDC has no support for encryption type (14)
    at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:66)
    at sun.security.krb5.KrbAsReq.getReply(KrbAsReq.java:446)
    at sun.security.krb5.Credentials.sendASRequest(Credentials.java:401)
    at sun.security.krb5.Credentials.acquireTGT(Credentials.java:373)
    at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:662)
    ... 15 more
Caused by: KrbException: Identifier doesn't match expected value (906)
    at sun.security.krb5.internal.KDCRep.init(KDCRep.java:133)
    at sun.security.krb5.internal.ASRep.init(ASRep.java:58)
    at sun.security.krb5.internal.ASRep.<init>(ASRep.java:53)
    at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:50)
    ... 19 more
4

3 に答える 3

8

それで、私はこの段階を過ぎました。krb5.conf ファイルを微調整し、2 つのデフォルトのチケット タイプと許可されたタイプを aes256-cts-hmac-sha1-96 と1人のユーザーで機能しました。AD で他のユーザーに対して aes256 を有効にすると、引き続き機能しました。

于 2012-12-12T23:03:56.497 に答える
3

ユーザーのアカウントにアクセスし、[kerberos DES 暗号化タイプを使用する] チェックボックスをオンにする必要があります。

もちろん、これを行うには管理者として DS にログインする必要があります。

于 2012-12-04T15:42:45.487 に答える
1

init()KDCRep.javaを見ると、エラーをスローしているように見える唯一の部分は次のとおりです。

    150 if ((subDer.getTag() & 0x1F) == 0x00) {
    151 pvno = subDer.getData().getBigInteger().intValue();
    152 if (pvno != Krb5.PVNO) {
    153 throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION);
    154 }
    155}そうでなければ{
    156 新しい Asn1Exception をスローします (Krb5.ASN1_BAD_ID);
    157 }

エラーが として出力されるのは少し奇妙に思えますが、は のサブクラスであるKrbExceptionため、機能する可能性があります。 ただし、の他のサブクラスをスローすることはできません。KrbApErrExceptionKrbExceptioninit()KrbException

それをスクラッチします。KrbAsRep.java のコンストラクターがこれらのエラーをキャッチしてs として再スローするため、より良い可能性はAsn1Exception、そこにある sの 1 つです (スタック トレースと非常によく一致する適切なものを使用して)。KrbExceptioninitCause

"Identifier doesn't match expected value (906)"値が 906であるためAsn1Exception(Krb5.ASN1_BAD_ID)、をスローしていると思われます。のデフォルトのエラーのように見えるので、これはあまり役に立ちません。Krb5.ASN1_BAD_IDinit()

構成に対応するものを生成しDerValueて手動で検査できるかどうかを確認し、どこでinit()拒否されるかを確認してから、そこから後退して、構成のどの部分がエラービットを作成したかを調べます。


さらに調べてみると、このメッセージは、使用されたに違いない"KDC has no support for encryption type"と私に信じさせKrb5.KDC_ERR_ETYPE_NOSUPPます。ただし、これは の既定のインスタンスにのみ使用されるため、Etypeあまり意味がない可能性があります。

于 2012-11-29T13:40:34.783 に答える