GSS_INIT_SEC_CONTEXT(3) | Programmer's Manual | GSS_INIT_SEC_CONTEXT(3) |
名称
gss_init_sec_context — ピア (相手側) アプリケーションでセキュリティコンテキストを開始します書式
#include < gssapi/gssapi.h> OM_uint32
gss_init_sec_context( OM_uint32 *minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t *context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID *actual_mech_type, gss_buffer_t output_token, OM_uint32 *ret_flags, OM_uint32 *time_rec);
解説
アプリケーションとリモートピア (相手側) の間のセキュリティコンテキストの確立を開始します。最初に、 input_token パラメータは GSS_C_NO_BUFFER として、または、長さフィールドが値 0 を含む gss_buffer_desc オブジェクトへのポインタとして指定されるべきです。このルーチンは、ピアアプリケーションに転送されるべきである output_token を返します、ここで、ピアアプリケーションは、それを gss_accept_sec_context(3) に与えます。トークンを送信する必要がないなら、 gss_init_sec_context() は、output_token 引数の length field を 0 に設定することによって、これを示します。コンテキストの確率を完了するために、1 つ以上の応答トークンが、ピアアプリケーションから要求されます。そうであれば、 gss_init_sec_context() は、補助情報ビット GSS_S_CONTINUE_NEEDED を含む状態を返します。この場合、 gss_init_sec_context() は、input_token パラメータによって応答トークンを gss_init_sec_context() へ渡して、応答トークンがピアアプリケーションから受信されるとき、再び呼び出されるべきです。移植性のあるアプリケーションは、トークンの長さを使用して設定され、トークンが、送信するか、または待つ必要があるかどうか決定するために状態を返すべきです。したがって、一般的な移植性のある呼び出し側は、ループ中で、常に gss_init_sec_context() を呼び出すべきです:
int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0; while (!context_established) { maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); 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; }; if (maj_stat & GSS_S_CONTINUE_NEEDED) { receive_token_from_peer(input_token); } else { context_established = 1; }; };
ルーチンが値 GSS_S_CONTINUE_NEEDED を含んでいるメジャー状態を返すときはいつも、コンテキストが、完全に確立されるわけではなく、次の制限が出力パラメータに適用されます:
- time_rec パラメータを通して返された値は、付随の ret_flags パラメータが、メッセージごとのサービスが成功して完了した状態より前に適用されたことを示す、ビット GSS_C_PROT_READY_FLAG を含むまで、未定義で、 actual_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_FLAG と GSS_C_ANON_FLAG ビットの値は、実現が、コンテキストが成功して確立されるなら、有効となることが期待される値を含むべきです。特に、アプリケーションが req_flags 引数を通して委任または匿名の認証のようなサービスを要求していて、そのようなサービスが、基本的なメカニズムから利用可能でないなら、 gss_init_sec_context() は、サービスが提供されないトークンを生成し、サービスがサポートされない、 ret_flags 引数を通して示すべきです。アプリケーションが、(サービスがないとき継続することができないなら) gss_delete_sec_context(3) を呼び出すことによってコンテキストの確立を中止することを選択するか、または、(サービスが強制的ではなく、単に望まれていたなら) トークンを転送して、コンテキスト確立を継続することを選択します。
- ret_flags 中の GSS_C_PROT_READY_FLAG と GSS_C_TRANS_FLAG ビットの値は、コンテキストが完全に確立されるか否かに関係なく、 gss_init_sec_context() が返る、その時点で実際の状態を示すべきです。
- メッセージ毎の保護をサポートする GSS-API 実装は、(すなわち、 GSS_S_COMPLETE ステータスコードと同時に起こるとき) 呼び出し側に返される、最終的な ret_flags に GSS_C_PROT_READY_FLAG を設定することが奨励されます。しかしながら、アプリケーションは、フラグが GSS-API のバージョン 1 で定義されなかったように、この振る舞いに依存するべきではありません。代わりに、アプリケーションは、どのようなメッセージ毎のサービスが GSS_C_INTEG_FLAG と GSS_C_CONF_FLAG 値に従ってコンテキストの確立が成功した後に、利用可能であるかを決定するべきです。
- ret_flags 引数内の他のすべてのビットは、0 に設定されるべきです。
gss_init_sec_context() の初期の呼び出しが失敗するなら、実装は、コンテキストオブジェクトを作成するべきでなくて、 context_handle パラメータの値を、これを示すように GSS_C_NO_CONTEXT に設定されたままにするべきです。万一、その後の呼び出しでの失敗の場合には、実装は、"半分構築"のセキュリティコンテキストを削除するのが許可されますが (その場合、それは context_handle パラメータに GSS_C_NO_CONTEXT 設定するべきです)、好ましい振る舞いは、セキュリティコンテキストをアプリケーションが ( gss_delete_sec_context(3) を使用して) 削除するように変更しないままの状態とすることです。 gssXdeleteXsecXcontext(3) )。
コンテキスト確立の間に、情報の状態ビット GSS_S_OLD_TOKEN と GSS_S_DUPLICATE_TOKEN は、致命的なエラーを示し、GSS-API メカニズムは、常に GSS_S_FAILURE の通常のエラーと関連しているそれらを返すべきです。組み合わせのためのこの要件は、GSS-API 仕様のバージョン 1 に存在しなかったので、バージョン 1 の実装以降を実行したいアプリケーションは、これらのコードの特別な場合でなければなければなりません。
パラメータ
- minor_status
- メカニズム特有のステータスコード。
- initiator_cred_handle
- 要求された資格証明のためのハンドル。デフォルトの開始プログラムのプリンシパルとして動作するために GSS_C_NO_CREDENTIAL を供給します。デフォルトの開始プログラムが定義されないなら、関数は、 GSS_S_NO_CRED. を返します。
- context_handle
- 新しいコンテキストのためのコンテキストハンドル。最初の呼び出しのために GSS_C_NO_CONTEXT を供給します。連続した呼び出しの最初の呼び出しによって返された値を使用します。このコンテキストハンドルに関連しているリソースは、 gss_delete_sec_context() への呼び出しで使用した後にアプリケーションによって解放されなければなりません。
- target_name
- ターゲットの名前
- mech_type
- 必要なメカニズムのオブジェクト ID。実装の特定のデフォルトを取得するためには、 GSS_C_NO_OID を供給します。
- req_flags
-
コンテキストが、特定のサービスオプションをサポートすることをそれぞれ要求する、様々な独立しているフラグを含んでいます。シンボル名が、各フラグに提供され、必要なフラグに対応するシンボル名は、ビットマスク値を形成するために論理的 OR されるべきです。フラグは、次の通りです:
- GSS_C_DELEG_FLAG
-
- True
- 資格証明をリモートピアへ委任します
- False
- 委任しません
- GSS_C_MUTUAL_FLAG
-
- True
- リモートピアがそれ自体を認証することを要求する
- False
- リモートピアだけに自己を認証する
- GSS_C_REPLAY_FLAG
-
- True
- gss_wrap(3) または gss_get_mic(3) で保護されたメッセージのための再生の検出を有効にします
- False
- 再生されたメッセージを検出することを試みません
- GSS_C_SEQUENCE_FLAG
-
- True
- 順序が狂って保護されたメッセージの検出を有効にします
- False
- 順序が狂ったメッセージを検出するのを試みません
- GSS_C_CONF_FLAG
-
- True
- ( gss_wrap(3) によって) 秘密性サービスを利用可能にすることを要求します。
- False
- メッセージ毎の秘密性サービスは、要求されません。
- GSS_C_INTEG_FLAG
-
- True
- ( gss_wrap(3) または gss_get_mic(3) によって) 整合性サービスを利用可能にすることを要求します
- False
- メッセージ毎の整合性サービスは、要求されません。
- GSS_C_ANON_FLAG
-
- True
- アクセプタへの開始プログラムの識別を明らかにしません。
- False
- 通常、認証します。
- time_req
- コンテキストが有効なままで残るべきである、必要な秒数。デフォルト有効期間を要求するためには、0 を供給します。
- input_chan_bindings
- アプリケーションで指定されたバインド。アプリケーションは、セキュリティコンテキストへのチャネル識別情報を安全にバインドすることができます。チャネルのバインドが使用されていないなら、 GSS_C_NO_CHANNEL_BINDINGS を指定します。
- input_token
- ピアアプリケーションから受信されたトークン。初期の呼び出しで GSS_C_NO_BUFFER または値 GSS_C_EMPTY_BUFFER を含むバッファへのポインタを供給します。
- actual_mech_type
- 使用される実際のメカニズム。このパラメータで返された OID は、読み込み専用として扱われるべきである静的な記憶域へのポインタとなります。特に、アプリケーションは、それを解放することを試みるべきではありません。必要でないなら、 NULL を指定します。
- output_token
- ピアアプリケーションに送信されるトークン。返されたバッファの長さのフィールドが 0 であるなら、トークンをピアアプリケーションに送信する必要はありません。このバッファに関連している記憶域は、 gss_release_buffer(3) への呼び出しで使用した後アプリケーションによって解放されなければなりません。
- ret_flags
-
コンテキストが、特定のサービスオプションをサポートすることをそれぞれ示す、様々な独立しているフラグを含んでいます。必要でないなら、
NULL を指定します。シンボル名が各フラグに提供され、必要なフラグに対応するシンボル名は、与えられたオプションがコンテキストでサポートされているかどうかをテストするために
ret_flags 値で論理的 AND されるべきです。フラグは、次の通りです:
- GSS_C_DELEG_FLAG
-
- True
- 資格証明は、リモートピアに委任されました
- 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
- 開始プログラムの識別は、明らかにされていなくて、出力されたトークンがアクセプタに渡されるなら、明らかにされません。
- False
- 開始プログラムの識別が、あったか、または通常、認証されます。
- GSS_C_PROT_READY_FLAG
-
- True
- ( GSS_C_CONF_FLAG と GSS_C_INTEG_FLAG の状態によって指定されるような) 保護サービスは、付随の主要な状態返り値が GSS_S_COMPLETE または GSS_S_CONTINUE_NEEDED のいずれかであるなら、利用可能です。
- False
- ( GSS_C_CONF_FLAG と GSS_C_INTEG_FLAG の状態によって指定されるような) 保護サービスは、付随の主要な状態返り値が GSS_S_COMPLETE である場合にだけ利用可能です。
- GSS_C_TRANS_FLAG
-
- True
- 結果のセキュリティコンテキストは、 gss_export_sec_context() への呼び出しを通して他のプロセスに転送されます。
- False
- セキュリティコンテキストは、転送可能ではありません。
他のすべてのビットは、0 に設定されるべきです。
- time_rec
- コンテキストが有効なままで残っている秒数。実装がコンテキストの期限切れをサポートしないなら、値 GSS_C_INDEFINITE が返されます。必要でないなら、 NULL を指定します。
戻り値
- GSS_S_COMPLETE
- 成功して終了した
- GSS_S_CONTINUE_NEEDED
- ピアアプリケーションからのトークンがコンテキストを完了するために要求され、 gss_init_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_BAD_SIG
- input_token は、無効の MIC、または検証することができなかった MIC を含んでいます
- GSS_S_OLD_TOKEN
- input_token が、古過ぎました。これは、コンテキスト確立の間の致命的なエラーです
- GSS_S_DUPLICATE_TOKEN
- input_token は、有効ですが、既に処理されたトークンの複製です。これは、コンテキスト確立の間の致命的なエラーです
- GSS_S_NO_CONTEXT
- 供給されたコンテキストハンドルが、有効なコンテキストを参照しなかったことを示します
- GSS_S_BAD_NAMETYPE
- 提供された target_name パラメータは、無効の、または、サポートされていない名前のタイプを含んでいます
- GSS_S_BAD_NAME
- 提供された target_name パラメータは、不適格でした。
- GSS_S_BAD_MECH
- 指定されたメカニズムは、提供された資格証明によってサポートされていないか、または実装によって認識されていません。
関連項目
gss_accept_sec_context(3), gss_delete_sec_context(3), gss_get_mic(3), gss_release_buffer(3), gss_wrap(3)規格
- RFC 2743
- Generic Security Service Application Program Interface Version 2, Update 1
- RFC 2744
- Generic Security Service API Version 2 : C-bindings
歴史
gss_init_sec_context のマニュアルページは、 FreeBSD 7.0 ではじめて登場しました。作者
John Wray, Iris AssociatesCOPYRIGHT
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 |