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
から true
が返されたあとでなければなりません。このメソッドが true
を返す場合は、getIntegState
も true を返します。requestConf(boolean)
boolean getIntegState()
isProtReady
または isEstablished
から 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, 2013, Oracle and/or its affiliates. All rights reserved.