public abstract class GSSManager extends Object
GSSName、GSSCredential、GSSContext という 3 つの GSS-API インタフェースを実装するクラスのインスタンスを作成できます。さらに、利用できるメカニズムの一覧および各メカニズムがサポートしている名前型を照会するためのメソッドも組み込まれています。
デフォルトの GSSManager サブクラスは、static メソッド getInstance を使用してインスタンス化できます。デフォルト以外の GSSManager サブクラスは、アプリケーションから任意にインスタンス化できます。デフォルトの GSSManager インスタンスでは、Kerberos v5 など、すべての GSS-API メカニズムがサポートされます。Kerberos v5 メカニズムは、OID「1.2.840.113554.1.2.2」として識別され、RFC 1964 に定義されています。
GSSManager abstract クラスの拡張として作成したサブクラスは、既知のサービスプロバイダ仕様を利用する、モジュール化されたプロバイダベース層として実装されます。GSSManager API を使用すれば、これらのサブクラスの実装に対してプロバイダの優先順位を設定できます。プロバイダベースの構成がサポートされていない場合は、明確に定義された例外がスローされます。アプリケーションを移植する可能性がある場合は、このことを認識し、例外をキャッチすることによって、適切に回復する必要があります。
プロバイダの使用方法として、次の 3 つの方法を想定しています。
GSSManager クラスには、これらの使用モードを有効にするために、次の 2 つのメソッドが用意されています。addProviderAtFront および addProviderAtEnd。これらのメソッドを実行すると、<プロバイダ, OID> というペアの順序付きリストが作成されます。各ペアは、特定の OID に優先的に使用されるプロバイダを示しています。
GSSManager によって作成された GSS-API オブジェクト間では、対話が行われます。このとき、特定のメカニズムに使用されるプロバイダを、すべてのオブジェクトで使用しなければならないことがあります。たとえば、ある GSSCredential が、メカニズム m に使用されるプロバイダ p の資格要素で構成されているとします。この資格は通常、メカニズム m にこのプロバイダ p を使用する GSSContext に渡す必要があります。移植性を最大化するには、異なる GSSManager で作成したオブジェクトを混在させないことをお勧めします。オブジェクトをすでに作成した GSSManager 上で addProviderAtFront メソッドを呼び出す場合は、できるかぎり別の GSSManager インスタンスを作成してください。
次のコード例は、GSSManager の使用方法を示しています。
GSSManager manager = GSSManager.getInstance();
Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
Oid krb5PrincipalNameType = new Oid("1.2.840.113554.1.2.2.1");
// Identify who the client wishes to be
GSSName userName = manager.createName("duke", GSSName.NT_USER_NAME);
// Identify the name of the server. This uses a Kerberos specific
// name format.
GSSName serverName = manager.createName("nfs/foo.sun.com",
krb5PrincipalNameType);
// Acquire credentials for the user
GSSCredential userCreds = manager.createCredential(userName,
GSSCredential.DEFAULT_LIFETIME,
krb5Mechanism,
GSSCredential.INITIATE_ONLY);
// Instantiate and initialize a security context that will be
// established with the server
GSSContext context = manager.createContext(serverName,
krb5Mechanism,
userCreds,
GSSContext.DEFAULT_LIFETIME);
サーバー側では、次のソースが使用されます。
// Acquire credentials for the server
GSSCredential serverCreds = manager.createCredential(serverName,
GSSCredential.DEFAULT_LIFETIME,
krb5Mechanism,
GSSCredential.ACCEPT_ONLY);
// Instantiate and initialize a security context that will
// wait for an establishment request token from the client
GSSContext context = manager.createContext(serverCreds);
GSSName, GSSCredential, GSSContext| コンストラクタと説明 |
|---|
GSSManager() |
| 修飾子と型 | メソッドと説明 |
|---|---|
abstract void |
addProviderAtEnd(Provider p, Oid mech)
このメソッドを使用して、指定されたメカニズムをサポートするプロバイダが見つからないときに使用するプロバイダを、GSSManager に設定します。
|
abstract void |
addProviderAtFront(Provider p, Oid mech)
このメソッドを使用して、サポートが必要なメカニズムに対して特定のプロバイダを優先して使用することを GSSManager に設定します。
|
abstract GSSContext |
createContext(byte[] interProcessToken)
以前にエクスポートされたコンテキストを作成するためのファクトリメソッドです。
|
abstract GSSContext |
createContext(GSSCredential myCred)
受け入れ側でコンテキストを作成するためのファクトリメソッドです。
|
abstract GSSContext |
createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime)
起動側でコンテキストを作成するためのファクトリメソッドです。
|
abstract GSSCredential |
createCredential(GSSName name, int lifetime, Oid[] mechs, int usage)
複数のメカニズムに対して資格を取得するためのファクトリメソッドです。
|
abstract GSSCredential |
createCredential(GSSName name, int lifetime, Oid mech, int usage)
メカニズムの資格を 1 つだけ取得するためのファクトリメソッドです。
|
abstract GSSCredential |
createCredential(int usage)
デフォルトの資格を取得するためのファクトリメソッドです。
|
abstract GSSName |
createName(byte[] name, Oid nameType)
指定された名前空間の byte 配列を GSSName オブジェクトに変換するファクトリメソッドです。
|
abstract GSSName |
createName(byte[] name, Oid nameType, Oid mech)
指定された名前空間の名前を含む byte 配列を GSSName オブジェクトに変換し、それをメカニズムに対して標準化するファクトリメソッドです。
|
abstract GSSName |
createName(String nameStr, Oid nameType)
指定された名前空間の文字列名を GSSName オブジェクトに変換するファクトリメソッドです。
|
abstract GSSName |
createName(String nameStr, Oid nameType, Oid mech)
指定された名前空間の文字列名を GSSName オブジェクトに変換し、それをメカニズムに対して標準化するファクトリメソッドです。
|
static GSSManager |
getInstance()
デフォルトの GSSManager 実装を返します。
|
abstract Oid[] |
getMechs()
この GSSManager を通して GSS-API の呼び出し側が利用できるメカニズムのリストを返します。
|
abstract Oid[] |
getMechsForName(Oid nameType)
指定された名前型をサポートしているメカニズムのリストを返します。
|
abstract Oid[] |
getNamesForMech(Oid mech)
指定されたメカニズムがサポートしている名前型を返します。
|
public static GSSManager getInstance()
public abstract Oid[] getMechs()
getInstance() メソッドから返されるデフォルトの GSSManager のリストには、OID「1.2.840.113554.1.2.2」が含まれています。この OID は、RFC 1964 に定義されている Kerberos v5 GSS-API メカニズムの識別 ID です。null 値が返される。public abstract Oid[] getNamesForMech(Oid mech) throws GSSException
デフォルトの GSSManager インスタンスでは、Kerberos v5 メカニズムがサポートされます。このメカニズム (「1.2.840.113554.1.2.2」) を指定した場合は、少なくとも GSSName.NT_HOSTBASED_SERVICE、GSSName.NT_EXPORT_NAME、および Kerberos v5 固有の OID「1.2.840.113554.1.2.2.1」を含む名前型リストが返されます。OID「1.2.840.113554.1.2.2.1」の名前空間は RFC 1964 で定義されています。
mech - 照会するメカニズムの OIDGSSException - 次のメジャーエラーコードを含む。GSSException.BAD_MECH GSSException.FAILUREgetMechsForName(Oid)public abstract Oid[] getMechsForName(Oid nameType)
指定された名前型が GSSName.NT_HOSTBASED_SERVICE、GSSName.NT_EXPORT_NAME、または「1.2.840.113554.1.2.2.1」のいずれかの場合、このリストには常に Kerberos v5 メカニズム (「1.2.840.113554.1.2.2」) が含まれます。
nameType - 検索対象の名前型の OIDnull が返される。getNamesForMech(Oid)public abstract GSSName createName(String nameStr, Oid nameType) throws GSSException
GSSName オブジェクトには通常、複数の名前表現 (サポートされているメカニズムごとに 1 つずつ) が含まれています。ただし、名前空間の型パラメータに NT_EXPORT_NAME が指定されているとき、またはこの GSS-API 実装が複数メカニズムでない場合などは例外です。このメソッドは、NT_EXPORT_NAME 型には使用しないでください。以前にエクスポートされた名前が任意のバイトで構成される場合、その名前を String として表現すると、文字エンコーディング方式の問題が発生することがあるためです。このような名前を変換する場合は、このメソッドをオーバーロードした createName にそれらのバイトを直接渡すことをお勧めします。nameStr - 作成する名前のプリント可能形式を表す文字列。nameType - 指定されたプリント可能名の名前空間を指定する OID。nameStr を検査するときに、各メカニズム固有のデフォルトのプリント可能構文を使用する場合は、null を指定できる。名前型 NT_EXPORT_NAME はできるだけ使用しない。GSSException - 次のメジャーエラーコードを含む。GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILUREGSSName, GSSName.NT_EXPORT_NAMEpublic abstract GSSName createName(byte[] name, Oid nameType) throws GSSException
GSSName オブジェクトには通常、複数の名前表現 (サポートされているメカニズムごとに 1 つずつ) が含まれています。ただし、名前空間の型パラメータに NT_EXPORT_NAME が指定されているとき、またはこの GSS-API 実装が複数メカニズムでない場合などは例外です。渡されるバイトは、指定された名前型に選択されているエンコーディング方式に応じて、配下の各メカニズムによって解釈されます。name - 作成する名前を含む byte 配列nameType - byte 配列に指定された名前の名前空間を指定する OID。byte 配列を検査するときに、各メカニズム固有のデフォルトの構文を使用する場合は、null を指定できる。GSSException - 次のメジャーエラーコードを含む。GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILUREGSSName, GSSName.NT_EXPORT_NAMEpublic abstract GSSName createName(String nameStr, Oid nameType, Oid mech) throws GSSException
createName メソッドを呼び出してから GSSName.canonicalize メソッドを呼び出す場合と同じ処理を実行するユーティリティーです。nameStr - 作成する名前のプリント可能形式を表す文字列。nameType - 指定されたプリント可能名の名前空間を指定する OID。nameStr を検査するときに、各メカニズム固有のデフォルトのプリント可能構文を使用する場合は、null を指定できる。名前型 NT_EXPORT_NAME はできるだけ使用しない。mech - メカニズムを示す OID。このメカニズムに対して名前が標準化されるGSSException - 次のメジャーエラーコードを含む。GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILUREGSSName.canonicalize(Oid), GSSName.NT_EXPORT_NAMEpublic abstract GSSName createName(byte[] name, Oid nameType, Oid mech) throws GSSException
createName メソッドを呼び出してから GSSName.canonicalize メソッドを呼び出す場合と同じ処理を実行するユーティリティーです。name - 作成する名前を含む byte 配列nameType - byte 配列に指定された名前の名前空間を指定する OID。byte 配列を検査するときに、各メカニズム固有のデフォルトの構文を使用する場合は、null を指定できる。mech - メカニズムを示す OID。このメカニズムに対して名前が標準化されるGSSException - 次のメジャーエラーコードを含む。GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILUREGSSName.canonicalize(Oid), GSSName.NT_EXPORT_NAMEpublic abstract GSSCredential createCredential(int usage) throws GSSException
GSS-API のメカニズムプロバイダは、呼び出し側にローカルアクセス制御ポリシーを適用することにより、権限のない呼び出し側が許可されていない資格を取得するのを防止する必要があります。各メカニズムプロバイダが必要とするアクセス権の種類は、メカニズムごとに文書にまとめられています。アクセス権の確認に失敗した場合、このメソッドから SecurityException がスローされます。
usage - この資格オブジェクトの使用目的。このパラメータの値は、GSSCredential.INITIATE_AND_ACCEPT、GSSCredential.ACCEPT_ONLY、および GSSCredential.INITIATE_ONLY のいずれかにする必要がある。GSSException - 次のメジャーエラーコードを含む。GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILUREGSSCredentialpublic abstract GSSCredential createCredential(GSSName name, int lifetime, Oid mech, int usage) throws GSSException
GSS-API のメカニズムプロバイダは、呼び出し側にローカルアクセス制御ポリシーを適用することにより、権限のない呼び出し側が許可されていない資格を取得するのを防止する必要があります。各メカニズムプロバイダが必要とするアクセス権の種類は、メカニズムごとに文書にまとめられています。アクセス権の確認に失敗した場合、このメソッドから SecurityException がスローされます。
デフォルト以外の lifetime 値は基本となっているメカニズムで受け付けられない場合があります。その場合、アプリケーションは、返された資格の getRemainingLifetime を呼び出す必要があります。
name - この資格を取得する主体の名前。デフォルトの主体を指定する場合は null を使用する。lifetime - 資格の残りの寿命 (秒単位)。資格の寿命を設定可能な最大期限にすることを要求するには、GSSCredential.INDEFINITE_LIFETIME を使用する。資格のデフォルトの寿命を要求する場合は GSSCredential.DEFAULT_LIFETIME を使用する。mech - 目的のメカニズムの OID。デフォルトのメカニズムを要求する場合は (Oid) null を使用する。usage - この資格オブジェクトの使用目的。このパラメータの値は、GSSCredential.INITIATE_AND_ACCEPT、GSSCredential.ACCEPT_ONLY、および GSSCredential.INITIATE_ONLY のいずれかにする必要がある。GSSException - 次のメジャーエラーコードを含む。GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILUREGSSCredentialpublic abstract GSSCredential createCredential(GSSName name, int lifetime, Oid[] mechs, int usage) throws GSSException
GSSCredential.getMechs メソッドを使用する必要があります。
GSS-API のメカニズムプロバイダは、呼び出し側にローカルアクセス制御ポリシーを適用することにより、権限のない呼び出し側が許可されていない資格を取得するのを防止する必要があります。各メカニズムプロバイダが必要とするアクセス権の種類は、メカニズムごとに文書にまとめられています。アクセス権の確認に失敗した場合、このメソッドから SecurityException がスローされます。
デフォルト以外の lifetime 値は基本となっているメカニズムで受け付けられない場合があります。その場合、アプリケーションは、返された資格の getRemainingLifetime を呼び出す必要があります。
name - この資格を取得する主体の名前。デフォルトの主体を指定する場合は null を使用する。lifetime - 資格の残りの寿命 (秒単位)。資格の寿命を設定可能な最大期限にすることを要求するには、GSSCredential.INDEFINITE_LIFETIME を使用する。資格のデフォルトの寿命を要求する場合は GSSCredential.DEFAULT_LIFETIME を使用する。mechs - この資格を取得するメカニズムを示す OID の配列。デフォルトのメカニズムをリクエストする場合は、(Oid[]) null を使用する。usage - この資格オブジェクトの使用目的。このパラメータの値は、GSSCredential.INITIATE_AND_ACCEPT、GSSCredential.ACCEPT_ONLY、および GSSCredential.INITIATE_ONLY のいずれかにする必要がある。GSSException - 次のメジャーエラーコードを含む。GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILUREGSSCredentialpublic abstract GSSContext createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime) throws GSSException
SecurityException がスローされます。
デフォルト以外の lifetime 値は配下のメカニズムで受け付けられない場合があります。その場合、アプリケーションは、返されたコンテキストに対して getLifetime を呼び出す必要があります。
peer - ターゲットピアの名前。mech - 目的のメカニズムの OID。デフォルトのメカニズムを要求する場合は null を使用する。myCred - 起動側の資格。デフォルトの起動側主体として機能させる場合は、null を使用する。lifetime - コンテキストにリクエストする寿命 (秒単位)。コンテキストの寿命を設定可能な最大期限にすることをリクエストするには、GSSContext.INDEFINITE_LIFETIME を使用する。コンテキストのデフォルトの寿命をリクエストする場合は GSSContext.DEFAULT_LIFETIME を使用する。GSSException - 次のメジャーエラーコードを含む。GSSException.NO_CRED GSSException.CREDENTIALS_EXPIRED GSSException.BAD_NAMETYPE GSSException.BAD_MECH GSSException.FAILUREGSSContextpublic abstract GSSContext createContext(GSSCredential myCred) throws GSSException
SecurityException がスローされます。myCred - 受け入れ側の資格。デフォルトの受け入れ側主体として機能させる場合は、null を使用する。GSSException - 次のメジャーエラーコードを含む。GSSException.NO_CRED GSSException.CREDENTIALS_EXPIRED GSSException.BAD_MECH GSSException.FAILUREGSSContextpublic abstract GSSContext createContext(byte[] interProcessToken) throws GSSException
セキュリティーコンテキストのプロセス間転送を実装がサポートすることは必須ではありません。コンテキストをエクスポートする前に GSSContext.isTransferable を呼び出すと、コンテキストを転送可能かどうかがわかります。コンテキストの転送をサポートしていない実装でこのメソッドを呼び出すと、エラーコード GSSException.UNAVAILABLE が設定された GSSException がスローされます。
一部のメカニズムプロバイダでは、セキュリティーコンテキストを起動または受け入れるアクセス権が呼び出し側に付与されている必要があります。アクセス権の確認に失敗した場合、このメソッドから SecurityException がスローされます。
interProcessToken - 以前に export メソッドから生成されたトークン。GSSException - 次のメジャーエラーコードを含む。GSSException.NO_CONTEXT, GSSException.DEFECTIVE_TOKEN, GSSException.UNAVAILABLE, GSSException.UNAUTHORIZED, GSSException.FAILUREGSSContextpublic abstract void addProviderAtFront(Provider p, Oid mech) throws GSSException
Oid ではなく null 値を使用したときは、使用するメカニズムに関係なく、指定されたプロバイダが優先して使用されます。指定されたプロバイダが必要なメカニズムをサポートしていない場合にだけ、別のプロバイダが使用されます。このメソッドを繰り返し呼び出しても、以前の設定は保持されます。
このメソッドを繰り返し呼び出しても、以前の設定は保持されます。ただし、それらの優先順位が低くなり、作成されたプロバイダと Oid のペアの順序付きリストが最優先されます。
Oid に null を指定して addProviderAtFront を呼び出すと、GSSManager インスタンスでこのプロバイダに設定された以前の優先順位がすべて削除されます。Oid に null 以外の値を指定して addProviderAtFront を呼び出すと、このメカニズムとこのプロバイダを使用して設定された以前の優先順位がすべて削除されます。
GSSManager 実装がプラグイン可能なプロバイダアーキテクチャーを備えた SPI をサポートしていない場合は、状態コード GSSException.UNAVAILABLE が設定された GSSException がスローされ、この操作が利用できないことが示されます。
たとえば、メカニズムが必要なときは、プロバイダ A を最初に確認するように設定するには、次の呼び出しを行います。
GSSManager mgr = GSSManager.getInstance();
// mgr may at this point have its own pre-configured list
// of provider preferences. The following will prepend to
// any such list:
mgr.addProviderAtFront(A, null);
以前に設定された A を確認する前に、OID が m1 であるメカニズムをプロバイダ B から取得する場合は、次の呼び出しを行います。
mgr.addProviderAtFront(B, m1);
GSSManager は、m1 が必要な場合、まず B を確認します。B が m1 をサポートしていない場合は、次に A を確認します。メカニズム m2 が必要で、m2 が m1 と異なる場合は、B を省略して直接 A を確認します。たとえば、同じ GSSManager インスタンスに対して、次の呼び出しを行うとします。
mgr.addProviderAtFront(B, null)
ペア (B, m1) の以前の設定がこの設定に包含されて、削除されます。この結果、優先順位のリストは {(B, null), (A, null), ...//以前に設定されたリスト} になります。ただし、次の呼び出しには注意してください。
mgr.addProviderAtFront(A, m3)
この呼び出しを実行しても、以前の設定 (A, null) を包含せず、リストは {(A, m3), (B, null), (A, null), ...} になります。p - mech に指定したメカニズムのサポートが必要なときに、使用するプロバイダのインスタンス。mech - このプロバイダが設定されているメカニズムGSSException - 次のメジャーエラーコードを含む。GSSException.UNAVAILABLE, GSSException.FAILUREpublic abstract void addProviderAtEnd(Provider p, Oid mech) throws GSSException
このメソッドを繰り返し呼び出しても、以前の設定は保持されます。ただし、それらの優先順位は新しい設定より高くなり、作成されたプロバイダと Oid のペアの順序付きリストの優先順位がもっとも低くなります。つまり、このリストが使用される前に、まず以前のプロバイダ設定が使用されます。
以前に設定した既存の優先順位の中に、ここで設定する優先順位と競合するものがある場合、この要求は無視されます。
GSSManager 実装がプラグイン可能なプロバイダアーキテクチャーを備えた SPI をサポートしていない場合は、状態コード GSSException.UNAVAILABLE が設定された GSSException がスローされ、この操作が利用できないことが示されます。
たとえば、OID が m1 であるメカニズムが必要なときは、システムのデフォルトプロバイダを最初に確認し、m1 がサポートされていないときにだけプロバイダ A を確認する場合は、次の呼び出しを行います。
GSSManager mgr = GSSManager.getInstance();
mgr.addProviderAtEnd(A, m1);
設定したプロバイダをすべて確認してから、すべてのメカニズムについてプロバイダ B を確認する場合は、次の呼び出しを行います。
mgr.addProviderAtEnd(B, null);
優先順位のリストが、{..., (A, m1), (B, null)} になります。たとえば、同じ GSSManager インスタンスに対して、次の呼び出しを行うとします。
mgr.addProviderAtEnd(B, m2)
ペア (B, null) の以前の設定がこの設定を包含し、この要求は無視されます。既存のペア (A, m1) または (B, null) に対して要求した場合も同じ結果になります。ただし、次の呼び出しには注意してください。
mgr.addProviderAtEnd(A, null)
この呼び出しを実行しても、以前の設定 (A, m1) によって包含されず、リストは {..., (A, m1), (B, null), (A, null)} になります。p - mech に指定したメカニズムのサポートが必要なときに、使用するプロバイダのインスタンス。mech - このプロバイダが設定されているメカニズムGSSException - 次のメジャーエラーコードを含む。GSSException.UNAVAILABLE, GSSException.FAILURE バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.