EN JA
GSS_ACCEPT_SEC_CONTEXT(3)
GSS_ACCEPT_SEC_CONTEXT(3) Programmer's Manual GSS_ACCEPT_SEC_CONTEXT(3)

名称

gss_accept_sec_contextピア (相手側) のアプリケーションによって開始されたセキュリティコンテキストを受け付けます

書式

#include < gssapi/gssapi.h>

OM_uint32
gss_accept_sec_context( OM_uint32 *minor_status, gss_ctx_id_t *context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, const gss_name_t *src_name, gss_OID *mech_type, gss_buffer_t output_token, OM_uint32 *ret_flags, OM_uint32 *time_rec, gss_cred_id_t *delegated_cred_handle);

解説

アプリケーションとリモートピア (相手側) の間のリモートで開始されたセキュリティコンテキストを確立できます。ルーチンは、ピアアプリケーションが、それを gss_init_sec_context(3) に示すところで、ピアアプリケーションに転送されるべきである output_token を返します。トークンを送信する必要がないなら、 gss_accept_sec_context() は、 output_token 引数の長さフィールドを 0 に設定することによって、これを指示します。コンテキスト確立を完了するためには、1 つ以上の応答トークンが、ピアアプリケーションから要求されます。そうであるなら、 gss_accept_sec_context() は、 input_token パラメータを通して gss_accept_sec_context() にトークンを渡して、応答トークンがピアアプリケーションから受信されるとき、再びそれを呼び出す呼べきである場合に、 GSS_S_CONTINUE_NEEDED の状態フラグを返します。

移植性のあるアプリケーションは、トークンの長さを使用して構成され、トークンが、送信されるか、またはウェート (待つ) する必要であるかどうか決定するための状態を返すべきです。したがって、一般的な移植性のある呼び出し側は、ループ中で常に gss_accept_sec_context() を呼び出すべきです:

gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; 
 
do { 
  receive_token_from_peer(input_token); 
  maj_stat = gss_accept_sec_context(&min_stat, 
        &context_hdl, 
        cred_hdl, 
        input_token, 
        input_bindings, 
        &client_name, 
        &mech_type, 
        output_token, 
        &ret_flags, 
        &time_rec, 
        &deleg_cred); 
  if (GSS_ERROR(maj_stat)) { 
    report_error(maj_stat, min_stat); 
  }; 
  if (output_token->length != 0) { 
    send_token_to_peer(output_token); 
 
    gss_release_buffer(&min_stat, output_token); 
  }; 
  if (GSS_ERROR(maj_stat)) { 
    if (context_hdl != GSS_C_NO_CONTEXT) 
      gss_delete_sec_context(&min_stat, 
        &context_hdl, 
        GSS_C_NO_BUFFER); 
    break; 
  }; 
} while (maj_stat & GSS_S_CONTINUE_NEEDED);

ルーチンが値 GSS_S_CONTINUE_NEEDED を含んでいる主要な状態を返すときはいつも、コンテキストが、完全に確立されるというわけではなく、次の制限が、出力パラメータに適用されます:

time_rec パラメータによって返される値は、付随する ret_flags パラメータが、メッセージ毎のサービスが成功して終了した状態より前に適用されることを示す、ビット GSS_C_PROT_READY_FLAG を含んでいないなら、未定義で、 mech_type パラメータを通して返された値は、ルーチンが GSS_S_COMPLETE の主要な状態の値を返すまで、未定義です。

文脈設立が成功するなら、ビットがパラメータが含むべきである ret_flags パラメータを通して返された GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAGGSS_C_ANON_FLAG ビットの値は、コンテキストの設立が成功するなら、有効となる実装が予想する値を含むべきです。

ret_flags 中の GSS_C_PROT_READY_FLAGGSS_C_TRANS_FLAG ビットの値は、 gss_accept_sec_context() が、コンテキストが完全に確立されるかどうかを返す、その時点の実際の状態を示すべきです。

これは、GSS-API 実装が呼び出し側に返された最後の ret_flagsGSS_C_PROT_READY_FLAG を設定することを必要としますが (すなわち、 GSS_S_COMPLETE ステータスコードに付随して起こるとき)、アプリケーションは、フラグが GSS-API のバージョン 1 で定義されなかったように、この振る舞いに依存するべきではありません。代わりに、アプリケーションは、 GSS_C_INTEG_FLAGGSS_C_CONF_FLAG 値に従って、成功したコンテキストの確立の後にメッセージ毎のサービスを使用するように準備されるべきです。

ret_flags 引数中の他のすべてのビットは、0 に設定されるべきです。ルーチンが GSS_S_CONTINUE_NEEDED を返している間に、 ret_flags 引数で返された値は、実装が確立したコンテキストから利用可能であると予想するサービスを示します。

gss_accept_sec_context() の初期の呼び出しが失敗するなら、実装は、コンテキストオブジェクトを作成するべきではなく、context_handle パラメータの値は、これを示すように GSS_C_NO_CONTEXT に設定されたままにするべきです。その後の呼び出しでの失敗の場合には、実装は、"半分構築"のセキュリティコンテキストを削除するのが許可されますが (その場合、それは、 context_handle パラメータに GSS_C_NO_CONTEXT を設定するべきです)、好ましい振る舞いは、セキュリティコンテキスト (と、context_handle パラメータ) をアプリケーションが ( gss_delete_sec_context(3) を使用して) 削除するように変更しない状態のままにしておくことです。

コンテキスト設立の間、情報のステータスビット GSS_S_OLD_TOKENGSS_S_DUPLICATE_TOKEN は、致命的な誤りを示し、GSS-API メカニズムは、常に GSS_S_FAILURE ルーチンのエラーと関連してそれらを返すべきです。組み合わせのためのこの要件は、GSS-API 仕様のバージョン 1 に存在しなかったので、バージョン 1 の実装をはみ出したいアプリケーションは、これらのコードを特別な場合とせざるを得ません。

パラメータ

context_handle
新しいコンテキストのためのコンテキストハンドル。最初の呼び出しのためには、 GSS_C_NO_CONTEXT を供給します。その後の呼び出しで返された値を使用します。いったん gss_accept_sec_context() がこのパラメータを通して値を返すと、リソースは、対応するコンテキストに割り当てられ、 gss_delete_sec_context(3) への呼び出しで使用された後にアプリケーションによって解放されなければなりません。
acceptor_cred_handle
コンテキストアクセプタによって要求される資格証明ハンドル。デフォルトのプリンシパルとしてコンテキストを受け付けるために GSS_C_NO_CREDENTIAL を指定します。 GSS_C_NO_CREDENTIAL が指定されますが、デフォルトのアクセプタプリンシパルが定義されないなら、 GSS_S_NO_CRED が返されます。
input_token_buffer
リモートアプリケーションから得られるトークン。
input_chan_bindings
アプリケーションで指定されるバインド (結合)。アプリケーションは、セキュリティコンテキストへのチャネル識別情報を安全にバインドできます。チャネルバインドが使用されていないなら、 GSS_C_NO_CHANNEL_BINDINGS を指定します。
src_name
コンテキスト開始ブログラムの認証された名前。使用の後に、この名前は、それを gss_release_name(3) に渡すことによって、割り付け解放されるべきです。必要でないなら、 NULL を指定します。
mech_type
使用されるセキュリティメカニズム。返された OID 値は、静的な記憶行へのポインタであり、呼び出し側によって読み込み専用として扱われるべきです (特に、それを解放する必要はありません)。必要でないなら、 NULL を指定します。
output_token
ピア (相手側) アプリケーションに渡されるトークン。返されたトークンバッファの長さのフィールドが 0 であるなら、トークンは、ピアアプリケーションに渡される必要はありません。 0 以外の長さフィールドが返されるなら、関連する記憶域は、 gss_release_buffer(3) への呼び出しでアプリケーションによって使用された後に解放されなければなりません。
ret_flags
コンテキストが特定のサービスオプションをサポートすることをそれぞれしめす、様々な独立しているフラグを含んでいます。必要でないなら、 NULL を指定します。シンボリック名は、各フラグに提供され、必要なフラグに対応するシンボリック名は、与えられたオプションがコンテキストによってサポートされているかどうかをテストするための ret_flags 値で、論理的 AND されるべきです。フラグは、次の通りです:
GSS_C_DELEG_FLAG
True
委任された資格証明は、delegated_cred_handle パラメータを通して利用可能です。
False
資格証明は、委任されませんでした。
GSS_C_MUTUAL_FLAG
True
相互の認証が要求されるリモートピア
False
リモートピアは、相互の認証を要求しませんでした
GSS_C_REPLAY_FLAG
True
保護されたメッセージの応答は、検出されます。
False
応答されたメッセージは、検出されません。
GSS_C_SEQUENCE_FLAG
True
順序が狂った保護されたメッセージは、検出されます。
False
順序が狂ったメッセージは、検出されません。
GSS_C_CONF_FLAG
True
秘密保持サービスは、 gss_wrap(3) ルーチンを呼び出すことによって、呼び出されます。
False
( gss_wrap(3) を通して) 秘密保持サービスは、利用可能でありません。 gss_wrap(3) は、メッセージのカプセル化、データ起源認証と整合性サービスだけを提供します。
GSS_C_INTEG_FLAG
True
整合性サービスは、 gss_get_mic(3) または gss_wrap(3) ルーチンのいずれかを呼び出すことによって、呼び出されます。
False
メッセージ毎の整合性サービスは、利用不可能です。
GSS_C_ANON_FLAG
True
開始プログラムは、認証されたくはありません。 src_name パラメータ (要求されるなら) は、匿名の内部名を含んでいます。
False
通常、開始プログラムは、認証されました。
GSS_C_PROT_READY_FLAG
True
( GSS_C_CONF_FLAGGSS_C_INTEG_FLAG の状態によって指定されるような) 保護サービスは、付随の主要な状態の返り値が GSS_S_COMPLETE または GSS_S_CONTINUE_NEEDED. のいずれかであるなら、利用可能です。
False
( GSS_C_CONF_FLAGGSS_C_INTEG_FLAG の状態によって指定されるような) 保護サービスは、付随の主要な状態の返り値が GSS_S_COMPLETE である場合にだけ利用可能です。
GSS_C_TRANS_FLAG
True
結果のセキュリティコンテキストは、 gss_export_sec_context(3) への呼び出しを通して他のプロセスに転送されます。
False
セキュリティコンテキストは、転送可能ではありません。

他のすべてのビットは、0 に設定されるべきです。

time_rec
コンテキストが有効なままで残っている秒数。必要でないなら、 NULL を指定します。
delegated_cred_handle
資格証明のための資格証明ハンドルは、コンテキスト開始プログラムから受信されました。 ret_flagsGSS_C_DELEG_FLAG が真である場合のみ有効です、この場合、明白な資格証明ハンドル (すなわち、 GSS_C_NO_CREDENTIAL でない) が、返されます。偽であるなら、 gss_accept_context() は、このパラメータを GSS_C_NO_CREDENTIAL に設定します。資格証明ハンドルが返されるなら、関連するリソースは、 gss_release_cred(3) への呼び出しで使用した後にアプリケーションによって解放されなければなりません。必要でないなら、 NULL を指定します。
minor_status
メカニズム特有のステータスコード。

戻り値

GSS_S_CONTINUE_NEEDED
ピアアプリケーションからのトークンは、コンテキストを完了するために必要であり、そのトークンで gss_accept_sec_context を再び呼び出さなければならないことを示します。
GSS_S_DEFECTIVE_TOKEN
input_token で実行された一貫性のチェックが失敗したことを示します。
GSS_S_DEFECTIVE_CREDENTIAL
資格証明で実行された一貫性のチェックが失敗したことを示します。
GSS_S_NO_CRED
供給された資格証明は、コンテキスト承認には有効でなかったか、または資格証明ハンドルが、なにも資格証明を参照していませんでした。
GSS_S_CREDENTIALS_EXPIRED
参照された資格証明は、期限が切れました。
GSS_S_BAD_BINDINGS
input_token は、input_chan_bindings パラメータを通して指定されたものと異なったチャネルバインドを含んでいます。
GSS_S_NO_CONTEXT
供給されたコンテキストハンドルが、有効なコンテキストを参照しなかったことを示します。
GSS_S_BAD_SIG
input_token は、無効の MIC を含んでいます。
GSS_S_OLD_TOKEN
input_token が、古過ぎました。これは、コンテキスト設立の間の致命的なエラーです。
GSS_S_DUPLICATE_TOKEN
input_token は、有効ですが、既に処理されたトークンの複製です。これは、コンテキスト設立の間の致命的なエラーです。
GSS_S_BAD_MECH
受信トークンは、実装または提供された信任状によってサポートされないメカニズムを指定しました。

規格

RFC 2743
Generic Security Service Application Program Interface Version 2, Update 1
RFC 2744
Generic Security Service API Version 2 : C-bindings

歴史

gss_accept_sec_context のマニュアルページは、 FreeBSD 7.0 ではじめて登場しました。

作者

John Wray, Iris Associates

COPYRIGHT

Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

January 26, 2010 FreeBSD