ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11 セキュリティーサービス開発ガイド Oracle Solaris 11.1 Information Library (日本語) |
1. Oracle Solaris の開発者向けセキュリティー機能 (概要)
3. PAM アプリケーションおよび PAM サービスの記述
8. Oracle Solaris 暗号化フレームワークの紹介
このセクションでは、クライアントアプリケーションとサーバーアプリケーションの間における一般的な SASL セッションを示します。この例の実行手順は次のとおりです。
クライアントアプリケーションは libsasl を初期化します。
クライアントアプリケーションは次の大域コールバックを設定します。
SASL_CB_GETREALM
SASL_CB_USER
SASL_CB_AUTHNAME
SASL_CB_PASS
SASL_CB_GETPATH
SASL_CB_LIST_END
サーバーアプリケーションは libsasl を初期化します。
サーバーアプリケーションは次の大域コールバックを設定します。
SASL_CB_LOG
SASL_CB_LIST_END
クライアントは、SASL 接続コンテキストを作成し、セキュリティープロパティーを設定し、利用可能な機構のリストをサーバーに要求します。
サーバーは、SASL 接続コンテキストを作成し、セキュリティープロパティーを設定し、適切な SASL 機構のリストを取得し、それをクライアントに送信します。
クライアントは、利用可能な機構のリストを取得し、特定の機構を選択し、その選択した機構と認証データをサーバーに送信します。
続いて、クライアントとサーバーは、認証とセキュリティー層の折衝が完了するまで、SASL データを交換します。
認証が完了すると、クライアントとサーバーは、セキュリティー層の折衝が行われたどうかを判断します。クライアントはテストメッセージをエンコードします。そのメッセージがサーバーに送信されます。サーバーは、認証ユーザーのユーザー名とそのユーザーのレルムも決定します。
サーバーは、エンコードされたメッセージを受信、デコード、および出力します。
クライアントは、sasl_dispose() を呼び出してクライアントの SASL 接続コンテキストを解放します。続いてクライアントは、sasl_done() を呼び出して libsasl のリソースを解放します。
サーバーは、sasl_dispose() を呼び出してそのクライアントの接続コンテキストを解放します。
次に、クライアントとサーバー間のやり取りの様子を示します。libsasl への呼び出しが発生するたびにその呼び出し内容が表示されています。送信側および受信側によるそれぞれのデータ転送も表示されています。なお、データはエンコードされた形式で表示され、その先頭に転送元が示されています。転送元がクライアントの場合は C:、サーバーの場合は S: と表示されます。両アプリケーションのソースコードについては、付録 E SASL ソースコード例を参照してください。
% doc-sample-client *** Calling sasl_client_init() to\ initialize libsasl for client use *** *** Calling sasl_client_new() to\ create client SASL connection context *** *** Calling sasl_setprop() to\ set sasl context security properties *** Waiting for mechanism list from\ server...
% doc-sample-server digest-md5 *** Calling sasl_server_init() to\ initialize libsasl for server use *** *** Calling sasl_server_new() to\ create server SASL connection context *** *** Calling sasl_setprop() to\ set sasl context security properties *** Forcing use of mechanism digest-md5 Sending list of 1 mechanism(s) S: ZGlnZXN0LW1kNQ==
S: ZGlnZXN0LW1kNQ== received 10 byte message got 'digest-md5' Choosing best mechanism from: digest-md5 *** Calling sasl_client_start() *** Using mechanism DIGEST-MD5 Sending initial response... C: RElHRVNULU1ENQ== Waiting for server reply...
C: RElHRVNULU1ENQ== got 'DIGEST-MD5' *** Calling sasl_server_start() *** Sending response... S: bm9uY2U9IklicGxhRHJZNE4Z1gyVm5lQzl5M\ TZOYWxUOVcvanUrcmp5YmRqaHMsbT0iam0xMTQx\ NDIiLHFvcD0iYXV0aCxhdXRoLWludCxhdXRoLWN\ vbmYiLGNpcGhlcj0icQwLHJjNC01NixyYzQiLG1\ heGJ1Zj0yMDQ4LGNoYXJzZXQ9dXRmLTgsYWxnb3\ JpdGhtPW1kXNz Waiting for client reply...
S: bm9uY2U9IklicGxhRHJZNE4Z1gyV\ m5lQzl5MTZOYWxUOVcvanUrcmp5YmRqaHMsbT0i\ am0xMTQxNDIiLHFvcD0iYXV0aCxhdXRoLWludCx\ hdXRoLWNvbmYiLGNpcGhlcj0icQwLHJjNC01Nix\ yYzQiLG1heGJ1Zj0yMDQ4LGNoYXJzZXQ9dXRmLT\ gsYWxnb3JpdGhtPW1kXNz received 171 byte message got 'nonce="IbplaDrY4N4szhgX2VneC9y16Na\ lT9W/ju+rjybdjhs=", realm="jm114142",\ qop="auth,auth-int,auth-conf",cipher="rc4-40,\ rc4-56, rc4",maxbuf=2048,charset=utf-8,\ algorithm=md5-sess' *** Calling sasl_client_step() *** Please enter your authorization name : zzzz Please enter your authentication name : zzzz Please enter your password : zz *** Calling sasl_client_step() *** Sending response... C: dXNlcm5hbWU9Inp6enoiLHJlYWxtPSJqbTEx\ NDE0MiIsbm9uY2U9IklicGxhRHJZNE4yVm5lQzl\ 5MTZOYWxUOVcvanUrcmp5YmRqaHM9Iixjbm9uY2\ U9InlqZ2hMVmhjRFJMa0FobtDS0p2WVUxMUM4V1\ NycjJVWm5IR2Vkclk9IixuYz0wMDAwMDAwMSxxb\ 3A9YXV0aC1jb25mGhlcj0icmM0IixtYXhidWY9M\ jA0OCxkaWdlc3QtdXJpPSJyY21kLyIscmVzcG9u\ c2U9OTYODI1MmRmNzY4YTJjYzkxYjJjZDMyYTk0\ ZWM= Waiting for server reply...
C: dXNlcm5hbWU9Inp6enoiLHJlYWxt\ PSJqbTExNDE0MiIsbm9uY2U9IklicGxhRHJZNE4\ yVm5lQzl5MTZOYWxUOVcvanUrcmp5YmRqaHM9Ii\ xjbm9uY2U9InlqZ2hMVmhjRFJMa0FobtDS0p2WV\ UxMUM4V1NycjJVWm5IR2Vkclk9IixuYz0wMDAwM\ DAwMSxxb3A9YXV0aC1jb25mGhlcj0icmM0IixtY\ XhidWY9MjA0OCxkaWdlc3QtdXJpPSJyY21kLyIs\ cmVzcG9uc2U9OTYODI1MmRmNzY4YTJjYzkxYjJj\ ZDMyYTk0ZWM= got 'username="zzzz",realm="jm114142",\ nonce="IbplaDrY4N4szhgX2VneC9y16NalT9W/\ ju+rjybdjhs=", cnonce="yjghLVhcDRLkAhoi\ rwKCKJvYU11C8WSrr2UZnHGedrY=", nc=00000001,\ qop=auth-conf,cipher="rc4",maxbuf=2048,\ digest-uri="rcmd/", response=966e978252\ df768a2cc91b2cd32a94ec' *** Calling sasl_server_step() *** Sending response... S: cnNwYXV0aD0yYjEzMzRjYzU4NTE4MTEwOWM3\ OTdhMjUwYjkwMzk3OQ== Waiting for client reply...
S: cnNwYXV0aD0yYjEzMzRjYzU4NTE4\ MTEwOWM3OTdhMjUwYjkwMzk3OQ== received 40 byte message got 'rspauth=2b1334cc585181109c797a250b903979' *** Calling sasl_client_step() *** C: Negotiation complete *** Calling sasl_getprop() *** Username: zzzz SSF: 128 Waiting for encoded message...
Waiting for client reply... C: got '' *** Calling sasl_server_step() *** Negotiation complete *** Calling sasl_getprop() to get username,\ realm, ssf *** Username: zzzz Realm: 22c38 SSF: 128 *** Calling sasl_encode() *** sending encrypted\ message 'srv message 1' S: AAAAHvArjnAvDFuMBqAAxkqdumzJB6VD1oaj\ iwABAAAAAA==
S: AAAAHvArjnAvDFuMBqAAxkqdumzJ\ B6VD1oajiwABAAAAAA== received 34 byte message got '' *** Calling sasl_decode() *** received decoded message 'srv message 1' *** Calling sasl_encode() *** sending encrypted message 'client message 1' C: AAAAIRdkTEMYOn9X4NXkxPc3OTFvAZUnLbZA\ Nqzn6gABAAAAAA== *** Calling sasl_dispose() to release client\ SASL connection context *** *** Calling sasl_done() to release libsasl \ resources ***
Waiting for encrypted message... C: AAAAIRdkTEMYOn9X4NXkxPc3OTFvAZUnLbZA\ Nqzn6gABAAAAAA== got '' *** Calling sasl_decode() *** received decoded message 'client message 1' *** Calling sasl_dispose() to release \ client SASL connection context ***