public interface GSSContext
呼出し側がデフォルトのGSSManager
インスタンスを使用してコンテキストをインスタンス化する場合は、Kerberos v5 GSS-APIメカニズムを使用してコンテキストが確立されます。Kerberos v5メカニズムは、OID「1.2.840.113554.1.2.2」として識別され、RFC 1964に定義されています。
コンテキストの確立処理が開始される前に、確立されるコンテキストの特性を起動側が要求する場合があります。呼出し側が要求した特性が、配下のメカニズムによってサポートされていないことがあります。コンテキストが確立すると、呼出し側はさまざまなクエリー・メソッドを使用して、そのコンテキストから提供された実際の特性やサービスを確認できます。デフォルトのGSSManager
インスタンスから提供されるKerberos v5 GSS-APIメカニズムを使用しているときは、すべてのオプション・サービスをローカルに利用できます。たとえば、相互認証、資格の委譲、機密性と整合性の保護、メッセージごとのリプレイ検出や順序付けなどを利用できます。GSS-APIでは、メッセージの機密性を保護するには、メッセージの整合性を保護する必要があります。
コンテキストが確立するまで、起動側によるinitSecContext
呼出しと受入れ側によるacceptSecContext
呼出しが繰り返されます。このループは、コンテキストが確立すると終了します。このループの処理中に、initSecContext
およびacceptSecContext
メソッドがトークンを生成し、アプリケーションはそのトークンをピアに送信します。場合によっては、ピアはacceptSecContext
またはinitSecContext
に対して適切なトークンを入力として渡します。
コンテキストが完全に確立する前でも、isProtReady
メソッドを呼び出して、wrap
およびgetMIC
によるメッセージごとの操作にコンテキストを使用できるかどうかを確認できます。この方法を使えば、完全に確立される前のコンテキストに対してメッセージごとの操作を使用できます。
コンテキストの確立が完了したあと、つまりisProtReady
メソッドからtrue
が返されたあとには、確立されたコンテキストの実際の特性やサービスを確認するためにクエリー・ルーチンを呼び出せます。また、wrap
およびgetMIC
のメッセージごとのメソッドを使用して、アプリケーションが提供するデータに対して暗号化操作を行うこともできます。
コンテキストが不要になったら、dispose
を呼び出して、そのコンテキストが使用しているシステム・リソースをすべて解放する必要があります。
セキュリティ・コンテキストは通常、処理するトークンに関する順序付けとリプレイ検出情報を保持しています。このため、トークンがこのコンテキストに渡されて処理される順序が重要になります。また、このインタフェース内のメソッドは同期化されません。複数のスレッド間でGSSContext
を共有するときは、なんらかのアプリケーション・レベルの同期化を行う必要があります。
GSS-APIコンテキストを使用するときのセキュリティ制限は、GSS-APIメカニズム・プロバイダによって異なります。これらの制限については、各メカニズム・プロバイダのドキュメントを参照してください。これらのセキュリティ制限をメカニズム層で検査する場合は、アプリケーションに適切な権限が付与されている必要があります。
次に示すコード例は、起動側ピアのGSSContext
インタフェースの使用法を示しています。GSSContext
オブジェクトに対して、オブジェクトのインスタンス化、指定するフラグの設定、コンテキストの確立、実際のコンテキスト・フラグの照会、アプリケーション・データに対するメッセージごとの操作、コンテキストの最終検出などを行っています。
// Create a context using default credentials // and the implementation specific default mechanism GSSManager manager ... GSSName targetName ... GSSContext context = manager.createContext(targetName, null, null, GSSContext.INDEFINITE_LIFETIME); // set desired context options prior to context establishment context.requestConf(true); context.requestMutualAuth(true); context.requestReplayDet(true); context.requestSequenceDet(true); // establish a context between peers byte []inToken = new byte[0]; // Loop while there still is a token to be processed while (!context.isEstablished()) { byte[] outToken = context.initSecContext(inToken, 0, inToken.length); // send the output token if generated if (outToken != null) sendToken(outToken); if (!context.isEstablished()) { inToken = readToken(); } // display context information System.out.println("Remaining lifetime in seconds = " + context.getLifetime()); System.out.println("Context mechanism = " + context.getMech()); System.out.println("Initiator = " + context.getSrcName()); System.out.println("Acceptor = " + context.getTargName()); if (context.getConfState()) System.out.println("Confidentiality (i.e., privacy) is available"); if (context.getIntegState()) System.out.println("Integrity is available"); // perform wrap on an application supplied message, appMsg, // using QOP = 0, and requesting privacy service byte [] appMsg ... MessageProp mProp = new MessageProp(0, true); byte []tok = context.wrap(appMsg, 0, appMsg.length, mProp); sendToken(tok); // release the local-end of the context context.dispose();
修飾子と型 | フィールドと説明 |
---|---|
static int |
DEFAULT_LIFETIME
コンテキストのデフォルトの寿命を表す寿命定数です。
|
static int |
INDEFINITE_LIFETIME
コンテキストの寿命が無期限であることを表す寿命定数です。
|
修飾子と型 | メソッドと説明 |
---|---|
byte[] |
acceptSecContext(byte[] inToken, int offset, int len)
ピアからトークンが着信したときに、コンテキストの受け入れ側によって呼び出されます。
|
void |
acceptSecContext(InputStream inStream, OutputStream outStream)
コンテキストの受け入れ側によって呼び出されるメソッドです。
|
void |
dispose()
コンテキスト・オブジェクトに格納されているシステム資源と暗号化情報をすべて解放し、そのコンテキストを無効にします。
|
byte[] |
export()
このコンテキストをエクスポートして、別のプロセスがインポートできるようにします。
|
boolean |
getAnonymityState()
コンテキストの起動側がコンテキストの受け入れ側に匿名として認証されているかどうかを判定します。
|
boolean |
getConfState()
このコンテキストでデータの機密性を利用できるかどうかを検査します。
|
boolean |
getCredDelegState()
このコンテキストで資格の委譲が有効になっているかどうかを判定します。
|
GSSCredential |
getDelegCred()
コンテキストの起動側からコンテキストの受け入れ側に委譲された資格を取得します。
|
boolean |
getIntegState()
このコンテキストでデータの整合性を利用できるかどうかを検査します。
|
int |
getLifetime()
このコンテキストの残りの寿命を検査します。
|
Oid |
getMech()
このコンテキストに使用されているメカニズムを検査します。
|
byte[] |
getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp)
指定されたメッセージの暗号化MIC (メッセージ整合性コード)を含むトークンを返します。このトークンは、ピア・アプリケーションに転送されます。
|
void |
getMIC(InputStream inStream, OutputStream outStream, MessageProp msgProp)
ストリームを使用して、指定されたメッセージの暗号化MICを含むトークンを返します。このトークンは、ピア・アプリケーションに転送されます。
|
boolean |
getMutualAuthState()
このコンテキストで相互認証が有効になっているかどうかを判定します。
|
boolean |
getReplayDetState()
このコンテキストのメッセージごとのセキュリティ・サービスでリプレイ検出が有効になっているかどうかを判定します。
|
boolean |
getSequenceDetState()
このコンテキストのメッセージごとのセキュリティ・サービスでシーケンス・チェックが有効になっているかどうかを判定します。
|
GSSName |
getSrcName()
コンテキストの起動側の名前を返します。
|
GSSName |
getTargName()
コンテキストの受け入れ側の名前を返します。
|
int |
getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize)
wrap に渡すことができるメッセージ・サイズの制限を決めるときに使用します。 |
byte[] |
initSecContext(byte[] inputBuf, int offset, int len)
コンテキストの起動側によって呼び出されます。コンテキストの作成処理を開始し、ピアの
acceptSecContext メソッドによって生成されたトークンを処理します。 |
int |
initSecContext(InputStream inStream, OutputStream outStream)
コンテキストの起動側によって呼び出され、コンテキストの作成処理を開始し、ピアの
acceptSecContext メソッドによって生成されたトークンをストリームを使用して処理します。 |
boolean |
isEstablished()
コンテキストを確立する前に、コンテキストの状態を確認するときに使用します。
|
boolean |
isInitiator()
このピアがコンテキストの起動側であるかどうかを検査します。
|
boolean |
isProtReady()
このコンテキストでメッセージごとの操作をすぐに開始できるかどうかを検査します。
|
boolean |
isTransferable()
export メソッドを使用して、このコンテキストをほかのプロセスに転送できるかどうかを検査します。 |
void |
requestAnonymity(boolean state)
起動側の資格を受け入れ側に公開しないように要求します。
|
void |
requestConf(boolean state)
wrap メソッドでデータの機密性を有効にするように要求します。 |
void |
requestCredDeleg(boolean state)
コンテキストの確立の際に起動側の資格を受け入れ側に委譲するように要求します。
|
void |
requestInteg(boolean state)
wrap メソッドとgetMIC メソッドでデータの整合性を有効にするように要求します。 |
void |
requestLifetime(int lifetime)
コンテキストの寿命を秒単位で要求します。
|
void |
requestMutualAuth(boolean state)
コンテキストが確立しているときに、相互認証が行われるように要求します。
|
void |
requestReplayDet(boolean state)
コンテキストが確立したあとで、メッセージごとのセキュリティ・サービスのリプレイ検出が有効になるように要求します。
|
void |
requestSequenceDet(boolean state)
コンテキストが確立したあとで、メッセージごとのセキュリティ・サービスのシーケンス・チェックが有効になるように要求します。
|
void |
setChannelBinding(ChannelBinding cb)
コンテキストが確立しているときにチャネル・バインディングが使用されるように設定します。
|
byte[] |
unwrap(byte[] inBuf, int offset, int len, MessageProp msgProp)
コンテキストの相手側で
wrap メソッドによって生成されたトークンを処理するために使用します。 |
void |
unwrap(InputStream inStream, OutputStream outStream, MessageProp msgProp)
ストリームを使用して、コンテキストの相手側のピアで
wrap メソッドによって生成されたトークンを処理します。 |
void |
verifyMIC(byte[] inToken, int tokOffset, int tokLen, byte[] inMsg, int msgOffset, int msgLen, MessageProp msgProp)
トークン・パラメータに含まれる暗号化MICを、指定されたメッセージに対して検査します。
|
void |
verifyMIC(InputStream tokStream, InputStream msgStream, MessageProp msgProp)
ストリームを使用して、トークン・パラメータに含まれる指定されたメッセージの暗号化MICを検証します。
|
byte[] |
wrap(byte[] inBuf, int offset, int len, MessageProp msgProp)
確立されたセキュリティ・コンテキストに対してメッセージごとのセキュリティ・サービスを適用します。
|
void |
wrap(InputStream inStream, OutputStream outStream, MessageProp msgProp)
ストリームを使用して、確立されたセキュリティ・コンテキストにメッセージごとのセキュリティ・サービスを適用します。
|
static final int DEFAULT_LIFETIME
static final int INDEFINITE_LIFETIME
Integer.MAX_VALUE
に設定する必要があります。byte[] initSecContext(byte[] inputBuf, int offset, int len) throws GSSException
acceptSecContext
メソッドによって生成されたトークンを処理します。このメソッドから返される出力トークンは、ピアのacceptSecContext
メソッドで処理するためにアプリケーションからピアに送信する必要があります。コンテキストのこちら側でコンテキストの確立処理が完了したかどうかは、isEstablished
を呼び出して確認できます。isEstablished
から戻り値false
が返された場合は、initSecContext
にさらにトークンを提供する必要があることを示しています。コンテキストの確立が完了したら、利用可能なコンテキスト・オプションをgetメソッドを使用して照会できます。
initSecContext
メソッドからピアのトークンが返され、isEstablished
からもtrue
が返されることがあります。この場合、トークンはピアに送信する必要がありますが、コンテキストの相手側はその時点で完全に確立されています。
一部のメカニズム・プロバイダでは、セキュリティ・コンテキストを起動するアクセス権が呼出し側に付与されている必要があります。アクセス権の確認に失敗した場合、このメソッドからSecurityException
がスローされます。
inputBuf
- ピアによって生成されたトークン。最初の呼出しでは、ピアから受信されているトークンがないため、このパラメータは無視されるoffset
- inputBuf内のオフセット。この位置からトークンが開始する。len
- トークンの長さ。null
の場合は、トークンが生成されないことを示す。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.DEFECTIVE_TOKEN
, GSSException.BAD_MIC
, GSSException.NO_CRED
, GSSException.CREDENTIALS_EXPIRED
, GSSException.BAD_BINDINGS
, GSSException.OLD_TOKEN
, GSSException.DUPLICATE_TOKEN
, GSSException.BAD_NAMETYPE
, GSSException.BAD_MECH
, GSSException.FAILURE
int initSecContext(InputStream inStream, OutputStream outStream) throws GSSException
acceptSecContext
メソッドによって生成されたトークンをストリームを使用して処理します。このメソッドからOutpuStream
に書き出された出力トークンは、ピアのacceptSecContext
呼出しで処理してもらうためにアプリケーションからピアに送信する必要があります。通常は、この処理を確実に行うために、OutputStream
のflush
メソッドを呼び出して2つのピア間の接続をカプセル化します。トークンがOutputStreamに書き出されたかどうかは、このメソッドの戻り値から判断できます。戻り値0
は、トークンが書き出されなかったことを示します。コンテキストのこちら側でコンテキストの確立処理が完了したかどうかは、isEstablished
を呼び出して確認できます。isEstablished
から戻り値false
が返された場合は、initSecContext
にさらにトークンを提供する必要があることを示しています。コンテキストの確立が完了したら、利用可能なコンテキスト・オプションをgetメソッドを使用して照会できます。
initSecContext
メソッドからピアのトークンが返され、isEstablished
からもtrue
が返されることがあります。この場合、トークンはピアに送信する必要がありますが、コンテキストの相手側はその時点で完全に確立されています。
GSS-APIの認証トークンには、開始トークンと終了トークンが定義されています。このメソッドが呼び出されるたびに、これらのトークンが1つずつ読み取られます。トークンの一部しか読み取られなかった場合、そのストリームはブロックされる場合があります。他のすべての点では、このメソッドはbyte配列をベースにしたinitSecContext
と等価です。
一部のメカニズム・プロバイダでは、セキュリティ・コンテキストを起動するアクセス権が呼出し側に付与されている必要があります。アクセス権の確認に失敗した場合、このメソッドからSecurityException
がスローされます。
次のコード例は、このメソッドの使用方法を示しています。
InputStream is ... OutputStream os ... GSSContext context ... // Loop while there is still a token to be processed while (!context.isEstablished()) { context.initSecContext(is, os); // send output token if generated os.flush(); }
inStream
- ピアによって生成されたトークンを含むInputStream。最初の呼出しでは、ピアからトークンを受信しないため、このパラメータは無視されるか、またはその時点のピアから受信する。outStream
- 出力トークンが書き込まれるOutputStream。コンテキスト確立の最終段階では、書き出されるバイトがないこともある。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.DEFECTIVE_TOKEN
, GSSException.BAD_MIC
, GSSException.NO_CRED
, GSSException.CREDENTIALS_EXPIRED
, GSSException.BAD_BINDINGS
, GSSException.OLD_TOKEN
, GSSException.DUPLICATE_TOKEN
, GSSException.BAD_NAMETYPE
, GSSException.BAD_MECH
, GSSException.FAILURE
byte[] acceptSecContext(byte[] inToken, int offset, int len) throws GSSException
initSecContext
メソッドに送信する必要があります。
アプリケーションは、isEstablished
を呼び出すことにより、このピアでコンテキストの確立処理が完了したかどうかを確認できます。isEstablished
から戻り値false
が返された場合は、このメソッドにさらにトークンを提供する必要があることを示しています。コンテキストの確立が完了したら、利用可能なコンテキスト・オプションをgetメソッドを使用して照会できます。
acceptSecContext
からピアのトークンが返され、isEstablished
からもtrue
が返されることがあります。この場合、トークンはピアに送信する必要がありますが、コンテキストの相手側はその時点で完全に確立されています。
一部のメカニズム・プロバイダでは、セキュリティ・コンテキストを受け入れるアクセス権が呼出し側に付与されている必要があります。アクセス権の確認に失敗した場合、このメソッドからSecurityException
がスローされます。
次のコード例は、このメソッドの使用方法を示しています。
byte[] inToken; byte[] outToken; GSSContext context ... // Loop while there is still a token to be processed while (!context.isEstablished()) { inToken = readToken(); outToken = context.acceptSecContext(inToken, 0, inToken.length); // send output token if generated if (outToken != null) sendToken(outToken); }
inToken
- ピアによって生成されたトークン。offset
- inToken内のオフセット。この位置からトークンが開始する。len
- トークンの長さ。null
の場合は、トークンが生成されないことを示す。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.DEFECTIVE_TOKEN
, GSSException.BAD_MIC
, GSSException.NO_CRED
, GSSException.CREDENTIALS_EXPIRED
, GSSException.BAD_BINDINGS
, GSSException.OLD_TOKEN
, GSSException.DUPLICATE_TOKEN
, GSSException.BAD_MECH
, GSSException.FAILURE
void acceptSecContext(InputStream inStream, OutputStream outStream) throws GSSException
OutputStream
に書き出された出力トークンは、ピアのinitSecContext
メソッドで処理するためにアプリケーションからピアに送信する必要があります。通常は、この処理を確実に行うために、OutputStream
のflush
メソッドを呼び出して2つのピア間の接続をカプセル化します。コンテキストのこちら側でコンテキストの確立処理が完了したかどうかは、isEstablished
を呼び出して確認できます。isEstablished
から戻り値false
が返された場合は、acceptSecContext
にさらにトークンを提供する必要があることを示しています。コンテキストの確立が完了したら、利用可能なコンテキスト・オプションをgetメソッドを使用して照会できます。
acceptSecContext
からピアのトークンが返され、isEstablished
からもtrue
が返されることがあります。この場合、トークンはピアに送信する必要がありますが、コンテキストの相手側はその時点で完全に確立されています。
GSS-APIの認証トークンには、開始トークンと終了トークンが定義されています。このメソッドが呼び出されるたびに、これらのトークンが1つずつ読み取られます。トークンの一部しか読み取られなかった場合、そのストリームはブロックされる場合があります。他のすべての点では、このメソッドはbyte配列をベースにしたacceptSecContext
と等価です。
一部のメカニズム・プロバイダでは、セキュリティ・コンテキストを受け入れるアクセス権が呼出し側に付与されている必要があります。アクセス権の確認に失敗した場合、このメソッドからSecurityException
がスローされます。
次のコード例は、このメソッドの使用方法を示しています。
InputStream is ... OutputStream os ... GSSContext context ... // Loop while there is still a token to be processed while (!context.isEstablished()) { context.acceptSecContext(is, os); // send output token if generated os.flush(); }
inStream
- ピアによって生成されたトークンを含むInputStream。outStream
- 出力トークンが書き込まれるOutputStream。コンテキスト確立の最終段階では、書き出されるバイトがないこともある。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.DEFECTIVE_TOKEN
, GSSException.BAD_MIC
, GSSException.NO_CRED
, GSSException.CREDENTIALS_EXPIRED
, GSSException.BAD_BINDINGS
, GSSException.OLD_TOKEN
, GSSException.DUPLICATE_TOKEN
, GSSException.BAD_MECH
, GSSException.FAILURE
boolean isEstablished()
true
。void dispose() throws GSSException
GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
int getWrapSizeLimit(int qop, boolean confReq, int maxTokenSize) throws GSSException
wrap
に渡すことができるメッセージ・サイズの制限を決めるときに使用します。このメソッドは、最大メッセージ・サイズを返します。同じconfReq
およびqop
パラメータが指定されたwrap
メソッドにこれを渡すと、maxTokenSize
バイト以下の出力トークンが生成されます。アプリケーションでこのメソッドを使用する場合は、最大メッセージ・サイズを使用するプロトコルを介して通信することを前提としています。このメソッドを使用すれば、メッセージを断片化してから保護を適用できます。
GSS-API実装では、getWrapSizeLimit
を呼び出したときに、無効なQOP値を検出するように推奨しています。ただし、必須ではありません。このルーチンでは、最大メッセージ・サイズのみが保証され、メッセージ保護用に特定のQOP値を利用できるかどうかについては保証されません。
qop
- ラップに要求する保護レベル。confReq
- ラップにプライバシを要求する場合は、true
。要求しない場合は、false
。maxTokenSize
- ラップによって生成されるトークンの最大サイズ(目標)。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.CONTEXT_EXPIRED
, GSSException.BAD_QOP
, GSSException.FAILURE
byte[] wrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
MessagePropオブジェクトは、アプリケーションによってインスタンス化されます。このオブジェクトを使用して、暗号化アルゴリズムを選択するためのQOP値や、オプションでメッセージを暗号化するためのプライバシ・サービスを指定します。この呼出しで使用される配下のメカニズムでは、このプライバシ・サービスを提供できない場合があります。その場合は、配下のメカニズムが提供する実際のプライバシ・サービスが、このMessagePropオブジェクトに設定されます。呼出し側は、復帰したらすぐにプライバシ・サービスを照会する必要があります。配下のメカニズムが要求されたQOPを提供できない場合は、BAD_QOPコードが設定されたGSSExceptionがスローされます。
アプリケーション・レベルのプロトコルには、ラップによって生成されたトークンを使用して「セキュア・フレーミング」を提供するものがあるため、実装では長さ0のメッセージのラップをサポートする必要があります。
アプリケーションは、このトークンをピアに送信します。
inBuf
- 保護されるアプリケーション・データ。offset
- inBuf内のオフセット。この位置からデータが開始する。len
- データの長さmsgProp
- MessagePropのインスタンス。目標のQOPとプライバシ状態を設定するためにアプリケーションが使用する。デフォルトのQOPを要求する場合は、目標QOPとして0を設定する。このメソッドから戻る際、このオブジェクトには、基本となっているメカニズムによってメッセージに適用された実際のプライバシ状態が格納される。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.CONTEXT_EXPIRED
, GSSException.BAD_QOP
, GSSException.FAILURE
void wrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
wrap
メソッドと等価です。
アプリケーションは、このトークンをピアに送信します。通常は、この処理を確実に行うために、OutputStream
のflush
メソッドを呼び出して2つのピア間の接続をカプセル化します。
MessagePropオブジェクトは、アプリケーションによってインスタンス化されます。このオブジェクトを使用して、暗号化アルゴリズムを選択するためのQOP値や、オプションでメッセージを暗号化するためのプライバシ・サービスを指定します。この呼出しで使用される配下のメカニズムでは、このプライバシ・サービスを提供できない場合があります。その場合は、配下のメカニズムが提供する実際のプライバシ・サービスが、このMessagePropオブジェクトに設定されます。呼出し側は、復帰したらすぐにプライバシ・サービスを照会する必要があります。配下のメカニズムが要求されたQOPを提供できない場合は、BAD_QOPコードが設定されたGSSExceptionがスローされます。
アプリケーション・レベルのプロトコルには、ラップによって生成されたトークンを使用して「セキュア・フレーミング」を提供するものがあるため、実装では長さ0のメッセージのラップをサポートする必要があります。
inStream
- 保護されるアプリケーション・データを含むInputStream。InStream内で利用できるデータがすべて使用される。outStream
- 保護されたメッセージを書き出すOutputStream。msgProp
- MessagePropのインスタンス。目標のQOPとプライバシ状態を設定するためにアプリケーションが使用する。デフォルトのQOPを要求する場合は、目標QOPとして0を設定する。このメソッドから戻る際、このオブジェクトには、基本となっているメカニズムによってメッセージに適用された実際のプライバシ状態が格納される。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.CONTEXT_EXPIRED
, GSSException.BAD_QOP
, GSSException.FAILURE
byte[] unwrap(byte[] inBuf, int offset, int len, MessageProp msgProp) throws GSSException
wrap
メソッドによって生成されたトークンを処理するために使用します。このメソッドは、ピア・アプリケーションからそのラップ呼出しに渡されたメッセージを返し、同時にそのメッセージに埋め込まれたMICを検査します。MessagePropオブジェクトは、アプリケーションによってインスタンス化されます。このオブジェクトは、QOP、メッセージに機密性が適用されているかどうか、およびメッセージの状態に関するその他の補足情報を呼出し側に返すために、配下のメカニズムによって使用されます。
アプリケーション・レベルのプロトコルには、ラップによって生成されたトークンを使用して「セキュア・フレーミング」を提供するものがあるため、実装では長さ0のメッセージのラップおよびラップ解除をサポートする必要があります。
inBuf
- ピアから受信したラップ・トークンを含むbyte配列。offset
- トークンが開始するオフセット。len
- トークンの長さmsgProp
- このメソッドから戻る際、このオブジェクトには、適用されたQOP、メッセージのプライバシ状態、およびトークンの補足情報(重複している、古い、順序が正しくない、ギャップのあとに着信したかどうか)が格納される。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.DEFECTIVE_TOKEN
, GSSException.BAD_MIC
, GSSException.CONTEXT_EXPIRED
, GSSException.FAILURE
void unwrap(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
wrap
メソッドによって生成されたトークンを処理します。このメソッドは、ピア・アプリケーションからそのラップ呼出しに渡されたメッセージを返し、同時にそのメッセージに埋め込まれたMICを検査します。MessagePropオブジェクトは、アプリケーションによってインスタンス化されます。このオブジェクトは、QOP、メッセージに機密性が適用されているかどうか、およびメッセージの状態に関するその他の補足情報を呼出し側に返すために、配下のメカニズムによって使用されます。
アプリケーション・レベルのプロトコルには、ラップによって生成されたトークンを使用して「セキュア・フレーミング」を提供するものがあるため、実装では長さ0のメッセージのラップおよびラップ解除をサポートする必要があります。
このメソッドが読み取る入力トークンの形式は、使用する配下のメカニズムの仕様に定義されています。このメソッドが呼び出されるたびに、これらのトークンが1つずつ読み込まれます。このメカニズムのトークンに明確な開始と終了が定義されている場合、トークンの一部しか読み込まれなかったときは、このメソッドはInputStream
をブロックする場合があります。開始トークンと終了トークンが定義されていない場合は、使用できるすべてのバイトがそのトークンの一部と見なされます。
入力ストリームのブロックが発生することがある点を除けば、このメソッドはbyte配列をベースにしたunwrap
メソッドと等価です。
inStream
- ピアによって生成されたラップ・トークンを含むInputStream。outStream
- アプリケーション・メッセージを書き出すOutputStream。msgProp
- このメソッドから戻る際、このオブジェクトには、適用されたQOP、メッセージのプライバシ状態、およびトークンの補足情報(重複している、古い、順序が正しくない、ギャップのあとに着信したかどうか)が格納される。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.DEFECTIVE_TOKEN
, GSSException.BAD_MIC
, GSSException.CONTEXT_EXPIRED
, GSSException.FAILURE
byte[] getMIC(byte[] inMsg, int offset, int len, MessageProp msgProp) throws GSSException
プライバシは、ラップを呼び出したときにだけ適用されます。
アプリケーション・レベルのプロトコルには、getMICによって生成されたトークンを使用して「セキュア・フレーミング」を提供するものがあるため、実装では長さ0のメッセージから派生したMICをサポートする必要があります。
inMsg
- MICの生成の対象となるメッセージ。offset
- inMsg内のオフセット。この位置からメッセージが開始する。len
- メッセージの長さmsgProp
- MessageProp
のインスタンス。目標QOPを設定するためにアプリケーションが使用する。デフォルトのQOPを要求する場合は、msgProp
で目標QOPを0
に設定する。デフォルトのQOPを要求するもう1つの方法としては、msgProp
にnull
を渡す方法がある。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.CONTEXT_EXPIRED
, GSSException.BAD_QOP
, GSSException.FAILURE
void getMIC(InputStream inStream, OutputStream outStream, MessageProp msgProp) throws GSSException
getMIC
メソッドと等価です。プライバシは、ラップを呼び出したときにだけ適用されます。アプリケーション・レベルのプロトコルには、getMICによって生成されたトークンを使用して「セキュア・フレーミング」を提供するものがあるため、実装では長さ0のメッセージから派生したMICをサポートする必要があります。
inStream
- MICの生成の対象となるメッセージを含むInputStream。InStream内で利用できるデータがすべて使用される。outStream
- 出力トークンを書き出すOutputStream。msgProp
- MessageProp
のインスタンス。目標QOPを設定するためにアプリケーションが使用する。デフォルトのQOPを要求する場合は、msgProp
で目標QOPを0
に設定する。デフォルトのQOPを要求するもう1つの方法としては、msgProp
にnull
を渡す方法がある。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.CONTEXT_EXPIRED
, GSSException.BAD_QOP
, GSSException.FAILURE
void verifyMIC(byte[] inToken, int tokOffset, int tokLen, byte[] inMsg, int msgOffset, int msgLen, MessageProp msgProp) throws GSSException
MessagePropオブジェクトは、アプリケーションによってインスタンス化されます。このオブジェクトは、メッセージに適用された保護の強さを示すQOP、およびメッセージの状態に関するその他の補足情報を呼出し側に返すために、配下のメカニズムによって使用されます。
アプリケーション・レベルのプロトコルには、getMICによって生成されたトークンを使用して「セキュア・フレーミング」を提供するものがあるため、実装では長さ0のメッセージに対するMICを計算および検査する必要があります。
inToken
- ピアのgetMICメソッドによって生成されたトークン。tokOffset
- inToken内のオフセット。この位置からトークンが開始する。tokLen
- トークンの長さ。inMsg
- 暗号化MICの検査の対象となるアプリケーション・メッセージ。msgOffset
- inMsg内のオフセット。この位置からメッセージが開始する。msgLen
- メッセージの長さ。msgProp
- このメソッドから戻る際、このオブジェクトには、適用されたQOP、およびトークンの補足情報(重複している、古い、順序が正しくない、ギャップのあとに着信したかどうか)が格納される。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.DEFECTIVE_TOKEN
GSSException.BAD_MIC
GSSException.CONTEXT_EXPIRED
GSSException.FAILURE
void verifyMIC(InputStream tokStream, InputStream msgStream, MessageProp msgProp) throws GSSException
verifyMIC
メソッドと等価です。MessagePropオブジェクトは、アプリケーションによってインスタンス化されます。このオブジェクトは、メッセージに適用された保護の強さを示すQOP、およびメッセージの状態に関するその他の補足情報を呼出し側に返すために、配下のメカニズムによって使用されます。アプリケーション・レベルのプロトコルには、getMICによって生成されたトークンを使用して「セキュア・フレーミング」を提供するものがあるため、実装では長さ0のメッセージに対するMICを計算および検査する必要があります。
このメソッドが読み取る入力トークンの形式は、使用する配下のメカニズムの仕様に定義されています。このメソッドが呼び出されるたびに、これらのトークンが1つずつ読み込まれます。このメカニズムのトークンに明確な開始と終了が定義されている場合、トークンの一部しか読み込まれなかったときは、このメソッドはInputStream
をブロックする場合があります。開始トークンと終了トークンが定義されていない場合は、使用できるすべてのバイトがそのトークンの一部と見なされます。
入力ストリームのブロックが発生することがある点を除けば、このメソッドはbyte配列をベースにしたverifyMIC
メソッドと等価です。
tokStream
- ピアのgetMICメソッドによって生成されたトークンを含むInputStream。msgStream
- 暗号化MICの検査の対象となるアプリケーション・メッセージを含むInputStream。msgStream内で利用できるデータがすべて使用される。msgProp
- このメソッドから戻る際、このオブジェクトには、適用されたQOP、およびトークンの補足情報(重複している、古い、順序が正しくない、ギャップのあとに着信したかどうか)が格納される。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.DEFECTIVE_TOKEN
GSSException.BAD_MIC
GSSException.CONTEXT_EXPIRED
GSSException.FAILURE
byte[] export() throws GSSException
このメソッドは、セキュリティ・コンテキストを非アクティブ化し、プロセス間トークンを作成します。このプロセス間トークンを別のプロセスのGSSManager.createContext
に渡すと、そのプロセスでそのコンテキストが再アクティブ化されます。特定のコンテキストのインスタンス化は、1回につき1つしかアクティブ化できません。このため、コンテキストのエクスポート側でエクスポートしたセキュリティ・コンテキストにアクセスしようとすると、失敗します。
この実装では、プロセス間トークンをインポートするプロセスが、ローカル・セキュリティ・ポリシーまたは実装の設定によって制限されることがあります。たとえば、同じアカウントで動作するプロセス間にだけコンテキストが渡されたり、同じプロセス・グループのプロセス間にだけ渡されたりします。
プロセス間トークンには、機密情報(暗号化鍵など)が含まれていることがあります。これらの機密情報は、できるだけプロセス間トークンに含めないようにするか、トークンを暗号化してからアプリケーションに返してください。ただし、標準的なGSS-APIの実装では、こうした対応を適用できないことがあります。このため、アプリケーションでプロセス間トークンを使用する場合は、セキュリティに十分に配慮し、信頼できるプロセスに転送してください。
セキュリティ・コンテキストのプロセス間転送を実装がサポートすることは必須ではありません。isTransferable
メソッドを呼び出せば、コンテキスト・オブジェクトを転送できるかどうかを確認できます。
エクスポートできないコンテキストに対してこのメソッドを呼び出すと、エラー・コードGSSException.UNAVAILABLE
を含む例外がスローされます。
GSSException
- 次のメジャー・エラー・コードを含む。GSSException.UNAVAILABLE
, GSSException.CONTEXT_EXPIRED
, GSSException.NO_CONTEXT
, GSSException.FAILURE
GSSManager.createContext(byte[])
void requestMutualAuth(boolean state) throws GSSException
initSecContext
を最初に呼び出すより前に行う必要があります。
すべてのメカニズムが相互認証をサポートしているわけではありません。また、アプリケーションは相互認証を必要としていなくても、いずれかのメカニズムが相互認証を必要としている場合もあります。そのため、この要求が受け付けられたかどうかを確認するため、アプリケーションでgetMutualAuthState
メソッドを使用する必要があります。
state
- 相互認証を使用するかどうかを示すboolean値。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
getMutualAuthState()
void requestReplayDet(boolean state) throws GSSException
initSecContext
を最初に呼び出すより前に行う必要があります。コンテキストが確立している間は、リプレイ検出はオプションではなく、配下のメカニズムの機能になります。
認証メカニズムによってはリプレイ検出がサポートされていないことがあります。また、アプリケーションはリプレイ検出を必要としていなくても、いずれかのメカニズムがリプレイ検出を必要としている場合もあります。そのため、この要求が受け付けられたかどうかを確認するため、アプリケーションでgetReplayDetState
メソッドを使用する必要があります。リプレイ検出が有効になっている場合、MessageProp.isDuplicateToken
メソッドとMessageProp.isOldToken
メソッドは、unwrap
メソッドまたはverifyMIC
メソッドに渡されるMessageProp
オブジェクトの有効な結果を返します。
state
- 確立したコンテキストに対してリプレイ検出を有効にするかどうかを示すboolean値。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
getReplayDetState()
void requestSequenceDet(boolean state) throws GSSException
initSecContext
を最初に呼び出すより前に行う必要があります。コンテキストの確立中、シーケンス・チェックはオプションではなく、配下のメカニズムの機能になります。
また、アプリケーションはシーケンス・チェックを必要としていなくても、認証メカニズムがシーケンス・チェックを必要としている場合もあります。そのため、このリクエストが受け付けられたかどうかを確認するため、アプリケーションでgetSequenceDetState
メソッドを使用する必要があります。シーケンス・チェックが有効になっている場合、MessageProp.isDuplicateToken
メソッド、MessageProp.isOldToken
メソッド、MessageProp.isUnseqToken
メソッド、およびMessageProp.isGapToken
メソッドは、unwrap
メソッドまたはverifyMIC
メソッドに渡されるMessageProp
オブジェクトに対して有効な結果を返します。
state
- 確立されたコンテキストに対してシーケンス・チェックを有効にするかどうかを示すboolean値。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
getSequenceDetState()
void requestCredDeleg(boolean state) throws GSSException
initSecContext
を最初に呼び出すより前に行う必要があります。認証メカニズムによっては、資格の委譲がサポートされていないことがあります。そのため、委譲を必要とするアプリケーションは、リクエストが受け付けられたかどうかを確認するためにgetCredDelegState
メソッドを使用する必要があります。委譲を使用してはならないとアプリケーションから示された場合、メカニズムはその要求を受け、委譲は行われません。これは一般規則に対する例外で、あるサービスが要求されなくてもメカニズムがそのサービスを有効にすることがあるということです。state
- 資格を委譲するかどうかを示すboolean値。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
getCredDelegState()
void requestAnonymity(boolean state) throws GSSException
initSecContext
を最初に呼び出すより前に行う必要があります。認証メカニズムによっては、起動側の匿名がサポートされていないことがあります。そのため、アプリケーションはgetAnonymityState
メソッドを使用して、この要求が受け付けられたかどうかを確認するようにしてください。state
- 起動側が受け入れ側に匿名主体として認証されるかどうかを示すboolean値。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
getAnonymityState()
void requestConf(boolean state) throws GSSException
wrap
メソッドでデータの機密性を有効にするように要求します。この要求は、コンテキストの起動側からのみ行うことができ、initSecContext
を最初に呼び出すより前に行う必要があります。認証メカニズムによっては、機密性をサポートしていないものや、アプリケーションから要求されない場合でも機密性を有効にするものがあります。要求が受け付けられたかどうかを確認するには、アプリケーションでgetConfState
メソッドを使用します。機密性が有効な場合に限り、wrap
メソッドに渡されたMessageProp
オブジェクトに含まれるプライバシ・リクエストを認証メカニズムが受け付けます。機密性を有効にすると、整合性も自動的に有効になります。
state
- 機密性を有効にするかどうかを示すboolean値。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
getConfState()
, getIntegState()
, requestInteg(boolean)
, MessageProp
void requestInteg(boolean state) throws GSSException
wrap
メソッドとgetMIC
メソッドでデータの整合性を有効にするように要求します。この要求は、コンテキストの起動側からのみ行うことができ、initSecContext
を最初に呼び出すより前に行う必要があります。認証メカニズムによっては整合性がサポートされていないことがあります。また、アプリケーションが整合性を要求しなくても、他のメカニズムが整合性を有効にする場合もあります。要求が受け付けられたかどうかを確認するには、アプリケーションでgetIntegState
メソッドを使用します。整合性を無効にすると、機密性も自動的に無効になります。
state
- 整合性を有効にするかどうかを示すboolean値。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
getIntegState()
void requestLifetime(int lifetime) throws GSSException
initSecContext
を最初に呼び出す前に行う必要があります。
コンテキストの実際の寿命は配下のメカニズムの機能によって異なるため、アプリケーションでgetLifetime
メソッドを呼び出して確認する必要があります。
lifetime
- コンテキストに指定する寿命(秒単位)。無期限の寿命をリクエストする場合はINDEFINITE_LIFETIME
を使用し、デフォルトの寿命をリクエストする場合はDEFAULT_LIFETIME
を使用する。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
getLifetime()
void setChannelBinding(ChannelBinding cb) throws GSSException
initSecContext
の最初の呼出し前に行う必要があります。受入れ側から呼び出すときは、acceptSecContext
の最初の呼出し前に行う必要があります。cb
- 使用するチャネル・バインディング。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
boolean getCredDelegState()
requestCredDeleg
メソッドはそのリクエストを受け付け、その時点から起動側に対してfalse
を返します。 requestCredDeleg(boolean)
boolean getMutualAuthState()
requestMutualAuth(boolean)
boolean getReplayDetState()
requestReplayDet(boolean)
boolean getSequenceDetState()
requestSequenceDet(boolean)
boolean getAnonymityState()
initSecContext
によってその時点までに生成されたコンテキスト確立トークンのいずれかに、起動側のIDが公開されているかどうかが検査されます。匿名としての認証が必要な場合は、initSecContext
を呼び出してからこのメソッドを呼び出し、生成されたトークンをピアに送信するか、そのコンテキストを中止するかを決定する必要があります。受け入れ側からこのメソッドを呼び出した場合は、acceptSecContext
によってその時点まで処理されたトークンのいずれかに、起動側のIDが公開されているかどうかが検査されます。requestAnonymity(boolean)
boolean isTransferable() throws GSSException
export
メソッドを使用して、このコンテキストをほかのプロセスに転送できるかどうかを検査します。この呼出しは、完全に確立されたコンテキストでだけ有効です。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
boolean isProtReady()
wrap
、unwrap
、getMIC
、verifyMIC
などのメソッドを使用できる場合はtrue、そうでない場合はfalse。boolean getConfState()
isProtReady
またはisEstablished
の1つからtrue
が返された後である必要があります。このメソッドがtrue
を返す場合は、getIntegState
もtrueを返します。requestConf(boolean)
boolean getIntegState()
isProtReady
またはisEstablished
の1つからtrue
が返された後である必要があります。getConfState
がtrueを返す場合は、このメソッドは常にtrue
を返します。requestInteg(boolean)
int getLifetime()
isEstablished
からtrueが返された後である必要があります。requestLifetime(int)
GSSName getSrcName() throws GSSException
GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
GSSName
GSSName getTargName() throws GSSException
GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
Oid getMech() throws GSSException
GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
GSSCredential getDelegCred() throws GSSException
getCredDelegState
メソッドを使用します。null
。GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
boolean isInitiator() throws GSSException
GSSException
- 次のメジャー・エラー・コードを含む。GSSException.FAILURE
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.