Java Generic Security Services
|
セキュリティーの目次 |
このページでは、メジャーバージョン番号 v1.4 から v6 で JavaTM に追加されたセキュリティー機能および拡張機能について説明し、そのリストを示します。
注: 本書で説明する API および機能は、変更される場合があります。
Java SE 6 の Java GSS/Kerberos 実装には、次の拡張機能が追加されました。
des-cbc-md5
des-cbc-crc
des3-cbc-sha1
Java SE 6 以降、Java GSS/Kerberos で AES 暗号化タイプ (AES128 および AES256) をサポートしています。これにより、Solaris 10 や MIT Kerberos などの他の Kerberos 実装と、Java SE Kerberos 実装の相互運用性が改善されています。 libdefaults
セクションで指定されます。次のタグを使用して指定されます。default_tkt_enctypes, default_tgs_enctypes, permitted_enctypes.
aes128-cts
aes128-cts-hmac-sha1-96
(AES256 暗号化タイプ) aes256-cts
aes256-cts-hmac-sha1-96
注: JDK の JCE フレームワークには、アプリケーションから利用可能な暗号化アルゴリズムおよび最大暗号化強度に関する制限を施行する機能が含まれます。これらの制限はすべて、「管轄ポリシーファイル」に指定されます。Java SE にバンドルされている管轄ポリシーファイルによって鍵の最大長が制限されています。このため、AES256 暗号化タイプを使用するには、制限のない JCE 暗号化ポリシーをインストールして 256 ビットの鍵の AES を許可する必要があります。 libdefaults
セクションには次のような行があります。default_tkt_enctypes = aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tgs_enctypes = aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
permitted_enctypes = aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tkt_enctypes
は、Ticket-Granting-Ticket のセッション鍵で使用する暗号化タイプを指定するために使用されます。クライアントはこれを使用して、KDC との通信で使用されるセッション鍵の暗号化タイプを制限します。デフォルト値は des-cbc-md5 des-cbc-crc des3-cbc-sha1 aes128-cts
です。 default_tgs_enctypes
は、サービスチケットのセッション鍵で使用する暗号化タイプを指定するために使用されます。クライアントはこれを使用して、クライアントとサーバーによって 共有されるセッション鍵の暗号化タイプを制限します。デフォルト値は des-cbc-md5 des-cbc-crc des3-cbc-sha1 aes128-cts
です。 permitted_enctypes
は、サービスによる使用が許可された暗号化タイプを指定するために使用されます。サーバーはこれを使用して、サーバーが受け入れるセッション鍵の暗号化タイプ を制限します。デフォルト値は des-cbc-md5 des-cbc-crc des3-cbc-sha1 aes128-cts
です。des-cbc-md5
des-cbc-crc
des3-cbc-sha1
Java SE 6 以降、Java GSS/Kerberos で RC4-HMAC 暗号化タイプをサポートしています。これにより、Windows、Solaris 10 や MIT Kerberos などの他の Kerberos 実装と、Java SE Kerberos 実装の相互運用性が改善されています。Windows Active Directoiory は、デフォルトの Kerberos 暗号化タイプとして RC4-HMAC をサポートしています。 libdefaults
セクションで指定されます。次のタグを使用して指定されます。default_tkt_enctypes, default_tgs_enctypes, permitted_enctypes.
rc4-hmac
arcfour-hmac
arcfour-hmac-md5
たとえば、構成ファイルの libdefaults セクションには以下のような行があります。
default_tkt_enctypes = aes128-cts des3-cbc-sha1 rc4-hmac des-cbc-md5 des-cbc-crc
default_tgs_enctypes = aes128-cts des3-cbc-sha1 rc4-hmac des-cbc-md5 des-cbc-crc
permitted_enctypes = aes128-cts des3-cbc-sha1 rc4-hmac des-cbc-md5 des-cbc-crc
default_tkt_enctypes
は、Ticket-Granting-Ticket のセッション鍵で使用する暗号化タイプを指定するために使用されます。クライアントはこれを使用して、KDC との通信で使用されるセッション鍵の暗号化タイプを制限します。デフォルト値は des-cbc-md5 des-cbc-crc rc4-hmac des3-cbc-sha1 aes128-cts
です。default_tgs_enctypes
は、サービスチケットのセッション鍵で使用する暗号化タイプを指定するために使用されます。クライアントはこれを使用して、クライアントとサーバーによって 共有されるセッション鍵の暗号化タイプを制限します。デフォルト値は des-cbc-md5 des-cbc-crc rc4-hmac des3-cbc-sha1 aes128-cts
です。 permitted_enctypes
は、サービスによる使用が許可された暗号化タイプを指定するために使用されます。サーバーはこれを使用して、サーバーが受け入れるセッション鍵の暗号化タイプ を制限します。デフォルト値は des-cbc-md5 des-cbc-crc rc4-hmac des3-cbc-sha1 aes128-cts
です。 Oid mechOid = new Oid("1.2.840.113554.1.2.2");
を使用するために Kerberos 機構 OID "1.2.840.113554.1.2.2"
を指定します。OID "1.3.6.1.5.5.2".
Oid mechOid = new Oid("1.3.6.1.5.5.2");
を指定する必要があります。この機能を使用すると、Java アプリケーションは、プラットフォームで使用可能なネイティブ GSS 実装の機能を利用できます。Java GSS によるネイティブ GSS ライブラリおよびネイティブ機構のリストへの委譲を有効にするには、システムプロパティー「sun.security.jgss.native」を true に設定します。有効にすると、Java GSS は、オペレーティングシステム固有の名前 (たとえば、Solaris: libgss.so、Linux: libgssapi.so) を使用してネイティブ GSS ライブラリを検索します。必要な GSS ライブラリの名前が異なっているか、またはこのライブラリがシステムライブラリのディレクトリにない場合は、システムプロパティー「sun.security.jgss.lib」を使用してフルパスを指定する必要があります。
Java SE 6 では、ネイティブ GSS サポートは Solaris および Linux に限定されています。ネイティブ GSS 統合がサポートされていないプラットフォーム上でこれらのシステムプロパティーを設定しても無視されます。
最初の資格取得を JAAS KerberosLoginModule に依存しているデフォルトの Java GSS 実装とは異なり、ネイティブ GSS を使用する場合は、最初の資格を事前に取得しておく必要があります。たとえば、JGSS API を呼び出す前に kinit を取得しておく必要があります。
また、Subject.doAs(...) や Subject.doAsPrivileged(...) などの特定の被認証者として操作を行う場合は、使用する GSSCredential を被認証者の private 資格セットに追加する必要があります。このようにしない場合、資格が見つからないため GSS 操作が失敗します。
com.sun.security.jgss.krb5.initiate com.sun.security.jgss.krb5.accept
J2SE 5.0 の Java GSS/Kerberos 実装には、次の拡張機能が追加されました。
トリプル DES 暗号化タイプは、Kerberos 構成ファイルの libdefaults セクションで指定されます。ファイル中では des3-cbc-sha1 として指定され、default_tkt_enctypes、default_tgs_enctypes、 および permitted_enctypes というタグが付きます。dec3-cbc-sha1 には以下の別名があります。
たとえば、構成ファイルの libdefaults セクションには以下のような行があります。des3-hmac-sha1 des3-cbc-sha1-kd des3-cbc-hmac-sha1-kd
default_tkt_enctypes は、Ticket-Granting-Ticket のセッション鍵で使用する暗号化タイプを指定するために使用されます。クライアントはこれを使用して、KDC との通信で使用されるセッション鍵の暗号化タイプを制限します。デフォルト値は des-cbc-md5 des-cbc-crc des3-cbc-sha1 です。default_tkt_enctypes = des3-cbc-sha1 des-cbc-md5 des-cbc-crc default_tgs_enctypes = des3-cbc-sha1 des-cbc-md5 des-cbc-crc permitted_enctypes = des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tgs_enctypes は、サービスチケットのセッション鍵で使用する暗号化タイプを指定するために使用されます。クライアントはこれを使用して、クライアントとサーバーによって 共有されるセッション鍵の暗号化タイプを制限します。デフォルト値は des-cbc-md5 des-cbc-crc des3-cbc-sha1 です。
permitted_enctypes は、サービスによる使用が許可された暗号化タイプを指定するために使用されます。サーバーはこれを使用して、サーバーが受け入れるセッション鍵の暗号化タイプ を制限します。デフォルト値は des-cbc-md5 des-cbc-crc des3-cbc-sha1 です。
KDC にメッセージを送信するときにメッセージのサイズが udp_preference_list よりも大きい場合、Java SE Kerberos ライブラリは TCP を使用します。メッセージのサイズが udp_preference_list より小さい場合は、UDP が 3 回まで試行されます。要求のサイズが大きすぎるという応答が KDC からあると、Java SE Kerberos ライブラリは TCP を使用します。
この機能により、Krb5LoginModule がチケットキャッシュから期限切れのチケットを取得した場合でも、TGT は自動的に更新され、チケットを要求した呼び出し側の被認証者に追加されます。何らかの理由でチケットを更新できない場合、Krb5LoginModule は構成済みのコールバックハンドラを使用してユーザー名とパスワードを検索し、新規 TGT を取得します。
この機能を使用するには、チケットキャッシュを使用するように Krb5LoginModule を構成し、新しく取り入れられた renewTGT オプションを true に設定します。TGT の更新を要求する JAAS ログイン構成ファイルの例を次に示します。
renewTGT が true に設定されている場合は、useTicketCache も true に設定する必要があります。 設定しない場合は構成エラーが発生します。server { com.sun.security.auth.module.Krb5LoginModule required principal=principal@your_realm useTicketCache=true renewTGT=true; };
JSSE アプリケーションが明示的な JAAS プログラムなしで Kerberos 暗号化方式を使用すると、SunJSSE プロバイダはこれらのインデックス名を使用して JAAS ログインモジュールを検出および構成し、必要な Kerberos 資格を取得します。 たとえば、そのようなアプリケーションには以下の JAAS 構成ファイルがあります。com.sun.net.ssl.server com.sun.net.ssl.client
エントリが検出されない場合は、デフォルトの「他の」インデックス名が使用されます。TLS のサービス名は「host」です。たとえば、KRBNT-OPERATIONS.ABC.COM というレルム内の raven.abc.com という名前のマシンで TLS サービスを実行する場合、サービス主体名は次のようになります。com.sun.net.ssl.server { com.sun.security.auth.module.Krb5LoginModule required principal=service_principal@your_realm useKeyTab=true keyTab=keytab_name storeKey=true; };
TLS クライアントには何の制限もないので、有効な Kerberos 主体名であれば使用可能です。host/raven.abc.com@KRBNT-OPERATIONS.ABC.COM
JSSE アプリケーションが明示的な JAAS プログラムとともに Kerberos 暗号化方式を使用する場合は、上述のインデックス名を含め、任意のインデックス名を使用できます。
java.security.krb5.kdc
および java.security.krb5.realm
を介して指定されます。前のリリースでは、Kerberos 構成値への変更は、アプリケーションが再起動された場合にのみ有効になりました。
Java プラットフォームの 1.4.2 リリースでは、JAAS 構成ファイルの Krb5LoginModule
へのエントリに、新しい boolean 型オプション refreshKrb5Config
を指定できます。このオプションが true
に設定されている場合は、Krb5LoginModule
の login
メソッドが呼び出される前に、構成値が再表示されます。
今回の 1.4.2 リリースにおける Sun の Kerberos 実装では、指定されていればスレーブ KDC に再要求します。スレーブ KDC は、Kerberos 構成ファイルで指定するか、システムプロパティー java.security.krb5.kdc
のコロン (:
) で区切られた KDC リストを介して指定することができます。
現行の 1.4.2 リリースでの Sun の Kerberos 実装では、TCP の自動フォールバックをサポートするようになりました。したがって、UDP を使用する Kerberos チケット要求が失敗して KDC からエラーコード KRB_ERR_RESPONSE_TOO_BIG
が返されると、TCP が自動的にデフォルトトランスポートとなります。
これまでは、Kerberos V5 で Java Generic Security Services (JGSS) を使用する際に useSubjectCredsOnly
プロパティーが true に設定されている場合は、Ticket Granting Ticket (TGT) が被認証者から取得され、GSS セキュリティーコンテキストを確立するための使用されていました。また、取得されたサービスチケットは、被認証者に保管されませんでした。
useSubjectCredsOnly
が true であれば、サービスチケットも被認証者に保管されるようになりました。
クライアントアプリケーションが被認証者の非公開資格を検索しても、前のリリースでは TGT のみが検出されました。現行のリリースでは、取得したサービスチケットがすべて検出されます。
この変更に関するバグ報告については、4688866 を参照してください。
Copyright © 1995-2006 Sun Microsystems, Inc. All Rights Reserved. コメントの送付先: java-security@sun.com。 |
Java Software |