JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11 セキュリティーサービス開発ガイド     Oracle Solaris 11 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  Oracle Solaris の開発者向けセキュリティー機能 (概要)

2.  特権付きアプリケーションの開発

3.  PAM アプリケーションおよび PAM サービスの記述

4.  GSS-API を使用するアプリケーションの記述

5.  GSS-API クライアント例

GSS-API クライアント例の概要

GSS-API クライアント例の構造

GSS-API クライアント例の実行

GSSAPI クライアント例: main() 関数

サーバーとの接続のオープン

サーバーとのセキュリティーコンテキストの確立

サービス名の GSS-API 形式への変換

GSS-API セキュリティーコンテキストの確立

クライアント側におけるその他の GSS-API コンテキスト操作

メッセージのラップと送信

GSS-API クライアントにおける署名ブロックの読み取りと検証

セキュリティーコンテキストの削除

6.  GSS-API サーバー例

7.  SASL を使用するアプリケーションの記述

8.  Oracle Solaris 暗号化フレームワークの紹介

9.  ユーザーレベルの暗号化アプリケーションとプロバイダの記述

10.  Oracle Solaris 鍵管理フレームワークの紹介

A.  C ベース の GSS-API プログラム例

B.  GSS-API リファレンス

C.  OID の指定

D.  SASL ソースコード例

E.  SASL リファレンス

用語集

索引

GSS-API クライアントにおける署名ブロックの読み取りと検証

gss-client プログラムはこの段階で、送信したメッセージの有効性を検証できます。 サーバーは、送信メッセージに対する MIC を戻します。 そのメッセージは recv_token() を使って取得できます。

そして、gss_verify_mic() 関数を使ってメッセージの「署名」つまり MIC を検証します。gss_verify_mic() は、受け取った MIC を元のラップされていないメッセージと比較します。 受け取った MIC は、out_buf に格納されたサーバーのトークンから取得します。 ラップされていないメッセージの MIC は、in_buf 内に格納されています。 2 つの MIC が一致した場合、メッセージの有効性は検証されたことになります。 その後、クライアントは受け取ったトークンのバッファー (out_buf) を解放します。

次のソースコードは、署名ブロックの読み取りと検証を行う方法を示しています。


注 - このソースコード例は、Oracle ダウンロードセンターからダウンロードすることも可能です。 http://www.oracle.com/technetwork/indexes/downloads/sdlc-decommission-333274.html を参照してください。


例 5-7 gss-client 例 – 署名ブロックの読み取りと検証

/* Read signature block into out_buf */
     if (recv_token(s, &out_buf) < 0) {
          (void) close(s);
          (void) gss_delete_sec_context(&min_stat, &context, GSS_C_NO_BUFFER);
          return -1;
     }

/* Verify signature block */
     maj_stat = gss_(&min_stat, context, &in_buf,
                               &out_buf, &qop_state);
     if (maj_stat != GSS_S_COMPLETE) {
          display_status("verifying signature", maj_stat, min_stat);
          (void) close(s);
          (void) gss_delete_sec_context(&min_stat, &context, GSS_C_NO_BUFFER);
          return -1;
     }
     (void) gss_release_buffer(&min_stat, &out_buf);

     if (use_file)
         free(in_buf.value);

     printf("Signature verified.\n");