GSS-API のプログラミング

実装に固有な機能

GSS-API の実装によっては、いくつかの動作が若干異なる場合もあります。ほとんどの場合、実装による違いはプログラムに最小限の影響しか与えません。どのような場合でも、実装に固有な動作 (Sun の実装も含む) に依存しなければ、移植性を最大限にすることができます。

Sun 固有の関数

Sun の実装に固有な GSS-API 関数は存在しません。

人が読める名前についての構文

GSS-API の実装によっては、名前の出力可能な形式についての構文が異なる場合があります。移植性を最大限にしたいアプリケーションでは、名前を比較するときに、人が読める (つまり、出力可能な) 形式で比較するのではなく、gss_compare_name() を使用して一致するかどうかを内部形式で比較するべきです。

Sun の 実装の gss_display_name() は名前を次のように表示します。input_name 引数がユーザープリンシパルを指す場合、gss_display_name()user_principal@realmoutput_name_buffer として、gss_OID 値を output_name_type として戻します。Kerberos v5 が実際の機構である場合、gss_OID は 1.2.840.11354.1.2.2 になります。

gss_display_name() に指定した名前が gss_import_name() への呼び出しで作成されていた場合、GSS_C_NO_OID を名前型として指定すると、gss_display_name()GSS_C_NO_OIDoutput_name_type パラメータ経由で戻します。

匿名の形式

gss_display_name() 関数は、匿名の GSS-API プリンシパルを示すとき、文字列 <anonymous> を出力します。この名前に関連する名前型 OID は GSS_C_NT_ANONYMOUS です。Sun の実装で有効な印刷可能な名前の中では、これ以外に < で始まり > で終わるものは存在しません。

選択されたデータ型の実装

Sun の実装では、gss_cred_tgss_ctx_id_tgss_name_t のデータ型はポインタです。他の実装の中には、算術型として指定されるものもあります。

コンテキストの削除と格納されたデータの解放

コンテキストの確立が失敗した場合、Sun の実装では「構築中」のコンテキストを自動的に削除しません。したがって、アプリケーションがこの事態を処理する、つまり、gss_delete_sec_context() でコンテキストを削除する必要があります。

Sun の実装では、格納されたデータ (内部名など) を、メモリー管理を通じて自動的に解放します。しかし、用心のため、データ要素が必要でなくなったときには、アプリケーションで適切な関数 (gss_release_name() など) を呼び出すべきです。

チャネルバインディング情報の保護

Sun の実装では、チャネルバインディングに含まれる情報を暗号化しません。したがって、プログラマは、この情報へ攻撃不可能であるとは考えるべきではありません。

コンテキストのエクスポートとプロセス間トークン

Sun の実装では、コンテキストのエクスポートをサポートします。しかし、GSS-API の他の実装の中には、サポートしないものもあります。コンテキストのエクスポートで使用されるプロセス間トークンには、オリジナルのセキュリティコンテキストからの重要なデータ (暗号化鍵など) が含まれている可能性があります。GSS-API の Sun の実装では、プロセス間トークンを暗号化しません。したがって、セキュリティコンテキストをエクスポートするアプリケーションは、転送中のこのようなトークンをラップして保護する必要があります。

Sun の実装では、同じコンテキストに対する複数のインポートの試みを検出および拒否します。

サポートされる資格の型

GSS-API の Sun の実装では、gss_acquire_cred() による、GSS_C_INITIATEGSS_C_ACCEPT、および GSS_C_BOTH の資格の獲得をサポートしています。

資格の有効期間の設定

GSS-API の Sun の実装では、資格の有効期間の設定をサポートします。したがって、プログラマは gss_acquire_cred()gss_add_cred() などの関数で、資格の有効期間に関連するパラメータを使用できます。

コンテキストの有効期間の設定

GSS-API の Sun の実装では、コンテキストの有効期間の設定をサポートします。したがって、プログラマは gss_init_sec_context()gss_inquire_context() などの関数で、コンテキストの有効期間に関連するパラメータを使用できます。

ラップサイズの制限と QOP 値

GSS-API の Sun の実装では、実際の機構とは異なり、gss_wrap() で処理するメッセージの最大サイズに制限を課しません。アプリケーションは gss_wrap_size_limit() でメッセージの最大サイズを決定できます。

GSS-API の Sun の実装では、gss_wrap_size_limit() を呼び出すとき、無効な QOP 値を検出します。

minor_status パラメータの使用

GSS-API の Sun の実装では、関数が minor_status パラメータで戻すのは、機構に固有な情報だけです。他の実装では、戻されたマイナー状態コードの一部として実装に固有な戻り値が含まれることもあります。