public interface GSSContext
呼出し側がデフォルトのGSSManagerインスタンスを使用してコンテキストをインスタンス化する場合は、Kerberos v5 GSS-APIメカニズムを使用してコンテキストが確立されます。 このメカニズムは、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.FAILUREint 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.FAILUREbyte[] 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.FAILUREvoid 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.FAILUREboolean isEstablished()
true。void dispose()
throws GSSException
GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREint 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.FAILUREbyte[] 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.FAILUREvoid 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.FAILUREbyte[] 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.FAILUREvoid 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.FAILUREbyte[] 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.FAILUREvoid 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.FAILUREvoid 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.FAILUREvoid 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.FAILUREbyte[] export()
throws GSSException
このメソッドは、セキュリティ・コンテキストを非アクティブ化し、プロセス間トークンを作成します。このプロセス間トークンを別のプロセスのGSSManager.createContextに渡すと、そのプロセスでそのコンテキストが再アクティブ化されます。 特定のコンテキストのインスタンス化は、1回につき1つしかアクティブ化できません。このため、コンテキストのエクスポート側でエクスポートしたセキュリティ・コンテキストにアクセスしようとすると、失敗します。
この実装では、プロセス間トークンをインポートするプロセスが、ローカル・セキュリティ・ポリシーまたは実装の設定によって制限されることがあります。 たとえば、同じアカウントで動作するプロセス間にだけコンテキストが渡されたり、同じプロセス・グループのプロセス間にだけ渡されたりします。
プロセス間トークンには、機密情報(暗号化キーなど)が含まれていることがあります。 これらの機密情報は、できるだけプロセス間トークンに含めないようにするか、トークンを暗号化してからアプリケーションに返してください。ただし、標準的なGSS-APIの実装では、こうした対応を適用できないことがあります。 このため、アプリケーションでプロセス間トークンを使用する場合は、セキュリティに十分に配慮し、信頼できるプロセスに転送してください。
セキュリティ・コンテキストのプロセス間転送を実装がサポートすることは必須ではありません。 isTransferableメソッドを呼び出せば、コンテキスト・オブジェクトを転送できるかどうかを確認できます。
エクスポートできないコンテキストに対してこのメソッドを呼び出すと、エラー・コードGSSException.UNAVAILABLEを含む例外がスローされます。
GSSException - 次のメジャー・エラー・コードを含む。GSSException.UNAVAILABLE, GSSException.CONTEXT_EXPIRED, GSSException.NO_CONTEXT, GSSException.FAILUREGSSManager.createContext(byte[])void requestMutualAuth(boolean state)
throws GSSException
initSecContextを最初に呼び出すより前に行う必要があります。
すべてのメカニズムが相互認証をサポートしているわけではありません。また、アプリケーションは相互認証を必要としていなくても、いずれかのメカニズムが相互認証を必要としている場合もあります。 そのため、この要求が受け付けられたかどうかを確認するため、アプリケーションでgetMutualAuthStateメソッドを使用する必要があります。
state - 相互認証を使用するかどうかを示すboolean値。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREgetMutualAuthState()void requestReplayDet(boolean state)
throws GSSException
initSecContextを最初に呼び出すより前に行う必要があります。 コンテキストが確立している間は、リプレイ検出はオプションではなく、配下のメカニズムの機能になります。
認証メカニズムによってはリプレイ検出がサポートされていないことがあります。また、アプリケーションはリプレイ検出を必要としていなくても、いずれかのメカニズムがリプレイ検出を必要としている場合もあります。 そのため、この要求が受け付けられたかどうかを確認するため、アプリケーションでgetReplayDetStateメソッドを使用する必要があります。 リプレイ検出が有効になっている場合、MessageProp.isDuplicateTokenメソッドとMessageProp.isOldTokenメソッドは、unwrapメソッドまたはverifyMICメソッドに渡されるMessagePropオブジェクトの有効な結果を返します。
state - 確立したコンテキストに対してリプレイ検出を有効にするかどうかを示すboolean値。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREgetReplayDetState()void requestSequenceDet(boolean state)
throws GSSException
initSecContextを最初に呼び出すより前に行う必要があります。 コンテキストの確立中、シーケンス・チェックはオプションではなく、配下のメカニズムの機能になります。
また、アプリケーションはシーケンス・チェックを必要としていなくても、認証メカニズムがシーケンス・チェックを必要としている場合もあります。 そのため、このリクエストが受け付けられたかどうかを確認するため、アプリケーションでgetSequenceDetStateメソッドを使用する必要があります。 シーケンス・チェックが有効になっている場合、MessageProp.isDuplicateTokenメソッド、MessageProp.isOldTokenメソッド、MessageProp.isUnseqTokenメソッド、およびMessageProp.isGapTokenメソッドは、unwrapメソッドまたはverifyMICメソッドに渡されるMessagePropオブジェクトに対して有効な結果を返します。
state - 確立されたコンテキストに対してシーケンス・チェックを有効にするかどうかを示すboolean値。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREgetSequenceDetState()void requestCredDeleg(boolean state)
throws GSSException
initSecContextを最初に呼び出すより前に行う必要があります。 認証メカニズムによっては、資格の委譲がサポートされていないことがあります。 そのため、委譲を必要とするアプリケーションは、リクエストが受け付けられたかどうかを確認するためにgetCredDelegStateメソッドを使用する必要があります。 委譲を使用してはならないとアプリケーションから示された場合、メカニズムはその要求を受け、委譲は行われません。 これは一般規則に対する例外で、あるサービスが要求されなくてもメカニズムがそのサービスを有効にすることがあるということです。 state - 資格を委譲するかどうかを示すboolean値。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREgetCredDelegState()void requestAnonymity(boolean state)
throws GSSException
initSecContextを最初に呼び出すより前に行う必要があります。 認証メカニズムによっては、起動側の匿名がサポートされていないことがあります。 そのため、アプリケーションはgetAnonymityStateメソッドを使用して、この要求が受け付けられたかどうかを確認するようにしてください。 state - 起動側が受け入れ側に匿名主体として認証されるかどうかを示すboolean値。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREgetAnonymityState()void requestConf(boolean state)
throws GSSException
wrapメソッドでデータの機密性を有効にするように要求します。 この要求は、コンテキストの起動側からのみ行うことができ、initSecContextを最初に呼び出すより前に行う必要があります。 認証メカニズムによっては、機密性をサポートしていないものや、アプリケーションから要求されない場合でも機密性を有効にするものがあります。 要求が受け付けられたかどうかを確認するには、アプリケーションでgetConfStateメソッドを使用します。 機密性が有効な場合に限り、wrapメソッドに渡されたMessagePropオブジェクトに含まれるプライバシ・リクエストを認証メカニズムが受け付けます。 機密性を有効にすると、整合性も自動的に有効になります。
state - 機密性を有効にするかどうかを示すboolean値。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREgetConfState(), getIntegState(), requestInteg(boolean), MessagePropvoid requestInteg(boolean state)
throws GSSException
wrapメソッドとgetMICメソッドでデータの整合性を有効にするように要求します。 この要求は、コンテキストの起動側からのみ行うことができ、initSecContextを最初に呼び出すより前に行う必要があります。 認証メカニズムによっては整合性がサポートされていないことがあります。また、アプリケーションが整合性を要求しなくても、他のメカニズムが整合性を有効にする場合もあります。 要求が受け付けられたかどうかを確認するには、アプリケーションでgetIntegStateメソッドを使用します。 整合性を無効にすると、機密性も自動的に無効になります。
state - 整合性を有効にするかどうかを示すboolean値。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREgetIntegState()void requestLifetime(int lifetime)
throws GSSException
initSecContextを最初に呼び出す前に行う必要があります。
コンテキストの実際の寿命は配下のメカニズムの機能によって異なるため、アプリケーションでgetLifetimeメソッドを呼び出して確認する必要があります。
lifetime - コンテキストに指定する寿命(秒単位)。 無期限の寿命をリクエストする場合はINDEFINITE_LIFETIMEを使用し、デフォルトの寿命をリクエストする場合はDEFAULT_LIFETIMEを使用する。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREgetLifetime()void setChannelBinding(ChannelBinding cb) throws GSSException
initSecContextの最初の呼出し前に行う必要があります。受入れ側から呼び出すときは、acceptSecContextの最初の呼出し前に行う必要があります。 cb - 使用するチャネル・バインディング。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREboolean 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.FAILUREboolean 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
isProtReadyまたはisEstablishedがtrueを返したあとでのみ有効です。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREGSSNameGSSName getTargName() throws GSSException
isProtReadyまたはisEstablishedがtrueを返したあとでのみ有効です。 GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREOid getMech() throws GSSException
GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREGSSCredential getDelegCred() throws GSSException
getCredDelegStateメソッドを使用します。 null。GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILUREboolean isInitiator()
throws GSSException
GSSException - 次のメジャー・エラー・コードを含む。GSSException.FAILURE バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。