セキュリティコンテキストが確立できるようになるまでに、サーバーとクライアントはそれぞれの資格を獲得する必要があります。獲得後、資格は有効期間が満了するまで何度も使用できます。資格が満了したときは、もう一度資格を獲得し直す必要があります。クライアントが使用する資格とサーバーが使用する資格とでは、その有効期間が異なる場合があります。
GSS-API ベースのアプリケーションは、次の 2 つの方法のどちらかで資格を獲得します。
gss_acquire_cred() 関数 (または、gss_add_cred() 関数) を使用する方法
コンテキストを確立するときに、デフォルトの資格 (値 GSS_C_NO_CREDENTIAL
) を指定する方法
ほとんどの場合、コンテキスト起動側 (クライアント) はログイン時に資格を受け取るため、gss_acquire_cred() を呼び出すのはコンテキスト受け入れ側 (サーバー) だけです。したがって、コンテキスト起動側は通常、デフォルトの資格だけを指定します。コンテキスト受け入れ側は gss_acquire_cred() を使用せずに、デフォルトの資格を使用することもできます。
起動側の資格は、他のプロセスに対してその ID を証明します。一方、受け入れ側は、セキュリティコンテキストを受け入れるための資格を獲得します。ここでは、クライアントがサーバーに ftp
要求を行う場合を考えます。クライアントはログイン時からすでに資格を持っています。そして、クライアントがコンテキストを起動しようとすると、GSS-API は自動的にその資格を取り出します。しかし、サーバープログラムは要求されたサービス (ftp
) の資格を明示的に獲得します。
次に、gss_acquire_cred() の構文を示します。
OM_uint32 gss_acquire_cred ( OM_uint32 *minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t *output_cred_handle, gss_OID_set *actual_mechs, OM_uint32 *time_rec) |
実際の機構が返す状態コード。
資格を獲得すべきプリンシパルの名前。上記例では「ftp」です。この引数は gss_import_name() で作成されます (名前を参照)。
desired_name を GSS_C_NO_NAME
に設定した場合、汎用の資格が戻されます。つまり、GSS-API のコンテキスト起動ルーチンとコンテキスト受け入れルーチンは資格に関してデフォルトの動作を使用します。言い換えると、gss_acquire_cred() に GSS_C_NO_NAME を渡すと、gss_init_sec_context() または gss_accept_sec_context() にデフォルトの資格要求 (GSS_C_NO_CREDENTIAL
) を渡したときと同じ資格が戻ります。詳細は コンテキストの起動 (クライアント) と コンテキストの受け入れ (サーバー) を参照してください。
資格が有効であるべき時間 (秒)。GSS_C_INDEFINITE
を指定すると、最大の可能な有効期間を要求することができます。
アプリケーションがこの資格で使用したい実際の機構の集合。これは gss_OID_set データ構造体であり、それぞれが適切な機構を表す 1 つまたは複数の gss_OID 構造体を持ちます。可能な限り、GSS_C_NO_OID_SET
を指定して、GSS-API からデフォルトのセットを取得してください。
この資格をどのように使用するかを示すフラグ。コンテキストを起動する場合は GSS_C_INITIATE
、コンテキストを受け入れる場合は GSS_C_ACCEPT
、または両方の場合は GSS_C_BOTH
に設定します。
この関数から戻される資格ハンドル。
この資格で使用できる機構のセット。どの機構であるかを知る必要がない場合は、NULL に設定します。
資格が実際に有効である時間 (秒)。時間が重要でない場合は、NULL に設定します。
正常に終了した場合、gss_acquire_cred() は GSS_S_COMPLETE を戻します。有効な資格を戻すことができない場合、gss_acquire_cred() は GSS_S_NO_CRED を戻します。他のエラーコードについては、gss_acquire_cred(3GSS) のマニュアルページを参照してください。資格を獲得する例については、資格の獲得(プログラムリストは server_acquire_creds()) を参照してください。
gss_add_cred() は gss_acquire_cred() と似ています。しかし gss_add_cred() は、既存の資格に基づいて新しい資格ハンドルを作成するか、既存の資格に新しい資格要素を追加することを、アプリケーションに可能にします。GSS_C_NO_CREDENTIAL
を既存の資格として指定した場合、gss_add_cred() はデフォルトの動作に基づいて新しい資格を作成します。詳細は、gss_add_cred(3GSS) のマニュアルページを参照してください。