web-dev-qa-db-ja.com

JDK1.8.0u121がKerberosのdefault_tkt_enctypesタイプを見つけられないのはなぜですか? (KrbException:default_tkt_enctypesでサポートされているデフォルトのetypeはありません)

以下は私の環境の詳細です:-

KDCサーバー:Windows Server 2012

ターゲットマシン:Windows 7

JDKバージョン:Oracle 1.8.0_121(64ビット)

Windows 7マシンでJavaのkinitコマンドを実行すると、次の例外が発生します:-

C:\Program Files\Java\jdk1.8.0_121\bin>kinit -k -t "C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\Tomcat_ad.keytab" HTTP/[email protected]
Exception: krb_error 0 no supported default etypes for default_tkt_enctypes No error
KrbException: no supported default etypes for default_tkt_enctypes
        at Sun.security.krb5.Config.defaultEtype(Config.Java:844)
        at Sun.security.krb5.internal.crypto.EType.getDefaults(EType.Java:249)
        at Sun.security.krb5.internal.crypto.EType.getDefaults(EType.Java:262)
        at Sun.security.krb5.KrbAsReqBuilder.build(KrbAsReqBuilder.Java:261)
        at Sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.Java:315)
        at Sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.Java:361)
        at Sun.security.krb5.internal.tools.Kinit.<init>(Kinit.Java:219)
        at Sun.security.krb5.internal.tools.Kinit.main(Kinit.Java:113)

デバッグモードでのコマンド出力:-

C:\Program Files\Java\jdk1.8.0_121\bin>kinit -J-Dsun.security.krb5.debug=true -k -t "C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\tomca
t_ad.keytab" HTTP/[email protected]
>>>KinitOptions cache name is C:\Users\devtcadmin\krb5cc_devtcadmin
Principal is HTTP/[email protected]
>>> Kinit using keytab
>>> Kinit keytab file name: C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\Tomcat_ad.keytab
Java config name: null
LSA: Found Ticket
LSA: Made NewWeakGlobalRef
LSA: Found PrincipalName
LSA: Made NewWeakGlobalRef
LSA: Found DerValue
LSA: Made NewWeakGlobalRef
LSA: Found EncryptionKey
LSA: Made NewWeakGlobalRef
LSA: Found TicketFlags
LSA: Made NewWeakGlobalRef
LSA: Found KerberosTime
LSA: Made NewWeakGlobalRef
LSA: Found String
LSA: Made NewWeakGlobalRef
LSA: Found DerValue constructor
LSA: Found Ticket constructor
LSA: Found PrincipalName constructor
LSA: Found EncryptionKey constructor
LSA: Found TicketFlags constructor
LSA: Found KerberosTime constructor
LSA: Finished OnLoad processing
Native config name: C:\Windows\krb5.ini
Loaded from native config
>>> Kinit realm name is DEVDEVELOPMENT.COM
>>> Creating KrbAsReq
>>> KrbKdcReq local addresses for dev26 are:

        dev26/192.168.1.229
IPv4 address

        dev26/fe80:0:0:0:78ae:388f:4f63:3717%11
IPv6 address
>>> KdcAccessibility: reset
>>> KeyTabInputStream, readName(): DEVDEVELOPMENT.COM
>>> KeyTabInputStream, readName(): HTTP
>>> KeyTabInputStream, readName(): dev26.devdevelopment.com
>>> KeyTab: load() entry length: 99; type: 18
Looking for keys for: HTTP/[email protected]
Added key: 18version: 3
Exception: krb_error 0 no supported default etypes for default_tkt_enctypes No error
KrbException: no supported default etypes for default_tkt_enctypes
        at Sun.security.krb5.Config.defaultEtype(Config.Java:844)
        at Sun.security.krb5.internal.crypto.EType.getDefaults(EType.Java:249)
        at Sun.security.krb5.internal.crypto.EType.getDefaults(EType.Java:262)
        at Sun.security.krb5.KrbAsReqBuilder.build(KrbAsReqBuilder.Java:261)
        at Sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.Java:315)
        at Sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.Java:361)
        at Sun.security.krb5.internal.tools.Kinit.<init>(Kinit.Java:219)
        at Sun.security.krb5.internal.tools.Kinit.main(Kinit.Java:113)

以下は、KDCサーバー(Windows Server 2012)でのktpassコマンドの出力であり、Tomcat_ad.keytabファイルを生成します。

C:\Users\Administrator>ktpass /out C:\Tomcat_ad.keytab /mapuser [email protected] /princ HTTP/[email protected] /pass ****** /crypto AES256-SHA1 ptype KRB5_NT_PRINCIPAL
    Targeting domain controller: dev.devdevelopment.com
    Using legacy password setting method
    Successfully mapped HTTP/dev26.devdevelopment.com to devtcadmin.
    Key created.
    Output keytab to C:\Tomcat_ad.keytab:
    Keytab version: 0x502
    keysize 99 HTTP/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x12 (AES256-SHA1) keylength 32 (0xf20788d7c6f99c385fc91b53c7d9ef55591d314e5340ca1fb9acac1b178c8861)

以下は、Windows 7マシンのC:\ Windowsにあるkrb5.iniファイルの内容です:-

[libdefaults]
default_realm=DEVDEVELOPMENT.COM
default_keytab_name=“C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\Tomcat_ad.keytab"
default_tkt_enctypes=aes256-cts-hmac-shal-96
default_tgs_enctypes=aes256-cts-hmac-shal-96
permitted_enctypes=aes256-cts-hmac-shal-96
udp_preference_limit=1
forwardable=true

[realms]
DEVDEVELOPMENT.COM={
    kdc=dev.devdevelopment.com:88
}

[domain_realm]
devdevelopment.com=DEVDEVELOPMENT.COM
.devdevelopment.com=DEVDEVELOPMENT.COM

以下は、Windows 7マシンでのJavaのktabコマンドの出力です:-

C:\Program Files\Java\jdk1.8.0_121\bin>ktab -l -e -t -k "C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\Tomcat_ad.keytab"
Keytab name: C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\Tomcat_ad.keytab
KVNO Timestamp      Principal
---- -------------- ---------------------------------------------------------------------------------------
   3 1/1/70 5:30 AM HTTP/[email protected] (18:AES256 CTS mode with HMAC SHA1-96)

[〜#〜] jce [〜#〜] jarファイルもC:\ Program Files\Java\jre1.8.0_121\lib\securityおよびC:\ Programで更新しました。 Files\Java\jdk1.8.0_121\jre\lib\securityフォルダ。

この例外を克服するために何をすべきですか?

編集1(私の3番目のコメントから続く):-

以下は、C:\ Program Files\Java\jre1.8.0_121\binフォルダーにあるTomcat_ad.keytabファイルを使用した最初のknitコマンドの出力です。

C:\Program Files\Java\jdk1.8.0_121\bin>kinit -k -t Tomcat_ad.keytab HTTP/dev26.devdevelopment.com
New ticket is stored in cache file C:\Users\devtcadmin\krb5cc_devtcadmin

そして、以下はC:\ Program Files\Apache Software Foundation\Tomcat 8.0\conf\Tomcat_ad.keytabフォルダーにあるTomcat_ad.keytabファイルを使用したkinitコマンドの出力です。C:\ Program Files\Java\jdk1.8.0_121\binを追加した後; path環境変数内:-

C:\Users\devtcadmin>kinit -k -t "C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\Tomcat_ad.keytab" HTTP/[email protected]
New ticket is stored in cache file C:\Users\devtcadmin\krb5cc_devtcadmin

ただし、今回のデバッグモードのkinitコマンドでは、次の例外が発生します:-

C:\Users\devtcadmin>kinit -J-Dsun.security.krb5.debug=true -k -t "C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf\Tomcat_ad.keytab" HTTP/[email protected]
>>>KinitOptions cache name is C:\Users\devtcadmin\krb5cc_devtcadmin
Principal is HTTP/[email protected]
>>> Kinit using keytab
>>> Kinit keytab file name: C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf\Tomcat_ad.keytab
Java config name: null
LSA: Found Ticket
LSA: Made NewWeakGlobalRef
LSA: Found PrincipalName
LSA: Made NewWeakGlobalRef
LSA: Found DerValue
LSA: Made NewWeakGlobalRef
LSA: Found EncryptionKey
LSA: Made NewWeakGlobalRef
LSA: Found TicketFlags
LSA: Made NewWeakGlobalRef
LSA: Found KerberosTime
LSA: Made NewWeakGlobalRef
LSA: Found String
LSA: Made NewWeakGlobalRef
LSA: Found DerValue constructor
LSA: Found Ticket constructor
LSA: Found PrincipalName constructor
LSA: Found EncryptionKey constructor
LSA: Found TicketFlags constructor
LSA: Found KerberosTime constructor
LSA: Finished OnLoad processing
Native config name: C:\Windows\krb5.ini
Loaded from native config
>>> Kinit realm name is DEVDEVELOPMENT.COM
>>> Creating KrbAsReq
>>> KrbKdcReq local addresses for dev26 are:

        dev26/192.168.1.229
IPv4 address

        dev26/fe80:0:0:0:78ae:388f:4f63:3717%11
IPv6 address
>>> KdcAccessibility: reset
Looking for keys for: HTTP/[email protected]
Using builtin default etypes for default_tkt_enctypes
default etypes for default_tkt_enctypes: 18 17 16 23.
Exception: krb_error 0 Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type:  No error
KrbException: Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type:
        at Sun.security.krb5.internal.crypto.EType.getDefaults(EType.Java:280)
        at Sun.security.krb5.KrbAsReqBuilder.build(KrbAsReqBuilder.Java:261)
        at Sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.Java:315)
        at Sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.Java:361)
        at Sun.security.krb5.internal.tools.Kinit.<init>(Kinit.Java:219)
        at Sun.security.krb5.internal.tools.Kinit.main(Kinit.Java:113)

C:\ Windows\krb5.iniファイルのこれらの行にコメントを付けた後、上記のコマンドが機能するのはなぜですか?そして、デバッグモードのkinitコマンドが上記の例外を出力するのはなぜですか?

6
Shiva

私はこれを前に見たことがあります。これを試して。キータブをC:\ Program Files\Java\jdk1.8.0_121\binディレクトリにコピーし、そのディレクトリ内から以下に示す簡単なコマンドを使用して再試行します。レルムはkrb5.confですでに定義されているため、KerberosレルムをSPNに追加する必要はありません。そのため、削除しました。

kinit -k -t Tomcat_ad.keytab HTTP/dev26.devdevelopment.com

それでも機能しない場合は、\ lib\securityディレクトリ内に無制限の強度のJCEjarファイルがあることを確認してください。あなたがそうしたと言ったとしても、Java JREアップグレードはそれらを上書きする可能性があります。

編集:ADユーザーアカウントのアカウントタブdevtcadminで、ボックス "このアカウントはKerberos AESをサポートしています256ビット暗号化 "がチェックされています。

それでも機能しない場合は、Windows 7マシンのC:\ Windows\krb5.confで、次の4行を図のようにコメントアウトします。 Kerberosはとにかく可能な限り最高の暗号化タイプを使用するため、これらは必須ではありません。Windows7/ 2008以降では、デフォルトでTCPが使用されるため、UDPを設定する必要はありません。優先制限。

#default_tkt_enctypes=aes256-cts-hmac-shal-96
#default_tgs_enctypes=aes256-cts-hmac-shal-96
#permitted_enctypes=aes256-cts-hmac-shal-96
#udp_preference_limit=1

これに関する詳細については、TechNetの記事をざっと見てください。 Kerberosキータブ–説明

5
T-Heron

Windows Server 2012R2からのJDKのKerberosサポートを、まだ「レガシー」キータブを使用しているLinuxサーバーのクライアントとして使用しようとしたときに、同様の問題が発生しました。私が見たエラーは次のとおりです。

KrbException: no supported default etypes for default_tkt_enctypes

この相互運用性の問題を修正するために、OpenJDKソースを調べて、EType.Javaにallow_weak_cryptoという設定を見つけました。

OpenJDK9 EType.Java

この設定をkrb5.confに追加すると、問題が解決しました。

[libdefaults]
       allow_weak_crypto = true
1
Gerhard Poul