• 検索結果がありません。

HTTPHTTP

ドキュメント内 <form action="/auth.html" method="post"> (ページ 38-49)

Operating System

Java Virtual Machine

4/.本 体は,それ が動作す るに依存 せず動作 を保障す るために言 語を使 用す る .図2%3に 示 すよ う に ,4/.は 大 きく 分 け て=つ の モ ジュー ル で 構成 さ れ る . 次 に そ れ ぞ れ の モ ジュー ル と そ の 役 割 に つ い て 述 べ る .

' :!は,受け取った'))リクエストに対して常に!

へ リ ダ イ レ ク ト 応 答 を 返 す 図2%3/の フォワ ー ド 機 能 に よって フォ ワ ー ド さ れ た'))リク エ ス ト は ,す べ て こ の モ ジュー ル が 処 理 す る .

' :!がリダイレクト応答を返した結果,ブラウザが!

に リ ク エ ス ト を 送 信 す る .!は リ ク エ ス ト を 受 け 取 る と ,ユ ー ザ 認 証 用 コ ン テ ン ツ を 返 す 図2%31.ま た ,ユ ー ザ が 送 る 認 証 情 報 >と パ ス ワー ドを 取 得 し ,認 証 処理 を!に 依 頼 する 図2%32.認証 に 成 功し た 場 合 ,/の設 定 を 変 更 す る た め に ;*!に 処 理 を 依 頼 す る 図

2%3の 5.そして,ユーザ認証と/の設定変更に成功すると,秘密鍵を発行し,

ユーザに認証成功を示すコンテンツを返す 図2%36.それと同時に!

:#に 端 末 のお よ び ア ド レ ス 情 報 と ,秘 密 鍵 を 登 録 す る 図2%37. 一方,認証に失敗,または設定変更に失敗した場合は,認証失敗と再認証を促すコ ン テ ン ツ を ユ ー ザ に 返 す.

!は 認証情 報を受 け取り,さ らに 外部の 認証シ ステム :>

!%と 連携 し て ユ ー ザ 認 証を 行 う 図2%33.そ し て!に 認証 結 果 を 返 す.こ の モ ジュー ル と 他 の モ ジュー ル !な どは , のイ ンタ フェースで 結合し ており,実装ク ラス を入れ 替える ことで ,さま ざま な外 部 認 証 シ ス テ ム と の 連 携 が 可 能 に な る .

! ま た は< !-/の 設 定 を 変 更 す る と き , 端 末 を 接 続 ま た は 切 断 す る た め の コ マ ン ド を 作 成 し ,外 部 プ ロ グ ラ ム を 呼 び 出 す

2%3=の 実 行 環 境 か ら は/の設 定 を 直 接 書 き 換 え ら れ な い た め , 外 部 プ ロ グ ラ ム と し て 実 行 す る 必 要 が あ る .

HTTP/1.1 307 Temporary Redirect Connection: close

Location: https://nat.foo.com/login.html

2%5リ ダ イ レ ク ト レ ス ポ ン ス

<form action="/auth.html" method="post">

<input type="text" name="loginId" value=""/>

<input type="password" name="passwd" value=""/>

<input type="submit"/ name="Send">

</form>

2%=認 証 用 コ ン テ ン ツ に 必 要 な 部 分

!

< !-は,セッション>を受け取り,そのセッション>を送った端末が

正規端末であることを確認した後,最終受信時刻の更新処理を!:#

に依頼する 図2%38.一方,不正端末であると判断した場合, ;*!

に 切 断 処 理 を 依 頼 す る と と も に ,! :#の エ ン ト リ ー を 削 除 す る 図2%39.ま た ,こ の モ ジュー ル は! :#か ら 一 定 間 隔 で 登 録 されて いるすべてのセッション>と最終 受信時刻を取得す る.そ して,一 定時間更 新 さ れ て い な い 端 末 は 切 断 し た と 判 断 し ,不 正 端 末 の 場 合 と 同 様 に 該 当 す る 端 末 を 切 断 す る .

認証処理

認証処理では,')):!とブラウザ,!とブラウザ,そ

し て!と 外 部 認 証 シ ス テ ム 間 で 次 に 示 す デ ー タ が や り 取 り さ れ る .

とブラウ ザ間

' :!は 受 け 取った リ ク エ ス ト に 対 し て 図2%5で 示 す'))レス ポ ン ス を 返す.ここでは説 明のため,図2%で 示したように),4に はグローバ ルアド レスH61%=%9%99Iが 割り当てられ,>サーバによってH%%!Iと して名前解 決が で き る も の と する .こ の 結 果,ブ ラ ウ ザ はH!Iヘッダ で示 し た@:に リ ク エ ス ト を 再 送 す る .

public interface Authenticator {

public boolean authenticate(String loginId, String passwd);

}

2%6!イ ン タ ー フェー ス

とブラウ ザ間

' :!の レ ス ポ ン ス に よって ,ブ ラ ウ ザ は!に 認 証 用 コ ン テ ン ツ を リ ク エ ス ト す る .認 証 用 コ ン テ ン ツ は 管 理 者 が 自 由 に カ ス タ マ イ ズ 可 能 だ が , ')))メ ソッド を 利 用 し てH%I> H#Iと パ ス ワード H Iパ ラメータを送信できるものでなくてはならない.具体的には図

2%=で 示 す 部 分 を 含 む 必 要 が あ る .

ユーザがログイン>とパスワードを入力し,送信ボタンを押すと,'))) メ ソッド で デ ー タ が 送 ら れ ,!が 認 証 情 報 を 取 得 す る .こ の 間 の デ ー タ は'))で暗 号 化 さ れ る た め ,安 全 に や り 取 り で き る .

と外部認 証システム

!は 図2%6で 示すインタフェースで定義 される.したがって,こ のイン タ フェー ス を 実 装 す る 具 象 ク ラ ス を 入 れ 替 え る こ と で ,さ ま ざ ま な 認 証 方 式 が 実

現できる.現在の実装では,:プロトコルを使用して外部:サーバと連携

す る:!を実 装 し て い る .

セッションの変更方法

2%1%2節 で 述 べ た 方 法 を 実 現 す る た め に は ,

¯ 生 成 し た 秘 密 鍵 を 安 全 に 端 末 に 送 り,か つ 端 末 か ら 漏 洩 し な い 仕 組 み .

¯ 端 末 で>5ハッシュ値 の 計 算 と ,値 の 保 持 .

とい う用 件を 満た す必 要が ある .'))だけ を使った 通信 では ,端 末に 送ら れた 秘 密 鍵 を 保 存 し て お く こ と が 難 し い .唯 一 クッキ ー を 使 う こ と で 保 存 す る こ と は で きるが ,通信は暗号化されて いないため,ネット ワークを盗聴されると簡単に盗ま れて しま う.そ の結 果,セッション>を 毎回 変更 した として も端 末の 偽造 が可能 に な る .

そこで4/.で は,')/:;! を利用して,'))だけを使って 上で述べた用件を満たす.! は通常のコンピュータに限らず,>な どの携 帯端 末 で も動 作 する が ,ユ ーザ に よっては セ キュリ ティ等 の理 由 で無 効 にし て い る 場合 も考え られ る.こ れに対 応する ために ,4/.は 端 末ごと に! が有 効か 無 効 か を 判 定 す る .次 に! が 有 効 な 場 合 に セッション>を 変 更 す る 方 法 に つ い て 述 べ ,! の 動 作 判 定 と 無 効 な 場 合 の 対 応 に つ い て 述 べ る

<HTML>

<FRAMESET ROWS="0%,0%,*">

<FRAME SRC="" NAME="$SECRET">

<FRAME SRC="script.html" NAME="script">

<FRAME SRC="success.html" NAME="success">

</FRAMESET>

</HTML>

2%7) %

"#が 有効な場合

2%7/:;の トップ ペ ー ジ %,図2%8と 図2%9/:;内 部 で 使 用 す る!!%! %の コ ン テ ン ツ を 示 す.図2%7に 示 す よ う に , % で は/:;;)タ グ で2つ の/:;を 定 義 し て い る が ,最 初 の/:;指 定 は

H; :;)I部 分 に 秘 密 鍵 を 埋 め 込 む た め に 使 用 し ,1番 目 の/:;に は>5ハッ

シュ値の計算をする! と,値を保存するためのを持つ! %を指定

する.これらのフレームの幅はいずれも 9J 指定であるため,ユーザが目にする こ と は な い .

2番目の/:;99J 指定で,認証成功を示す!!%を指定する.2%2%1%1 項で 述べたように ,4/.で はユ ーザ認証時の 通信に'))を使用する ため,安全 に秘密鍵を端末のブラウザに送ることができる.! %では,図2%93 に 示 す 手 順 で セッション>を 変 更 す る .

%に 埋 め 込 ま れ た 秘 密 鍵 を 取 得 す る .

1 ! を 用 い て , で 取 得 し た 秘 密 鍵 の>5ハッシュ値 を 計 算 す る .

2 1で 求 め た ハッシュ値 をタグ に 保 存 す る .

3 1で 求 め た ハッシュ値 を!!%?;)パ ラ メ ー タ と し て 付 加 し ,2番 目 の/:;を リ ロ ー ド す る .

こ の方 式で は,秘密 鍵が 埋め 込ま れる %! %'))で一 度だ け 送信されるため,安全な秘密鍵のやり取りができる.また,ユーザは認証後の画面 を開き続けて おくだけで接続を維持することができる ブ ラウザは最小化して構わ な い

"#の 動作判定と 無効な場 合の対応

4/.で は ,図2%に 示 すB!!-%を 利 用 し ,! の 動 作 判 定 を 行 う.

B!!-%は,ユーザ認証成功直後に送信される.! が有効なブラウザは,

<HTML>

<HEAD><TITLE> Authenticate Success</TITLE></HEAD>

<BODY>

認証成功.<BR/>この画面は閉じないでください .<BR/>

</BODY>

</HTML>

2%8 !!%

<HTML>

<HEAD><SCRIPT type="text/javascript">

var secret, sessionId;

var url = http://nat.foo.com:8000/success.html?sessionId= ; function keepalive() {

setTimeout("keepalive()",5000);

secret = parent[0].name; (1)

var currentKey = secret + document.forms[0].sessionId.value;

sessionId = MD5_hexhash(currentKey); (2)

document.forms[0].sessionId.value = sessionId; (3) var sendUrl = url + sessionId;

parent.success.location.href = sendUrl; (4) } function MD5_hash (data) {

// encrypt data

return crypted data;

} </SCRIPT></HEAD>

<BODY onload="keepalive()">

<FORM NAME="form">

<INPUT TYPE="hidden" name="sessionId" value=""/>

</FORM>

</BODY>

</HTML>

2%9 ! %

<HTML>

<HEAD>

<TITLE> Javascript Check</TITLE>

<meta http-equiv="Refresh"content="10 ;

URL=http://nat.foo.com:8000/nojsauth.html?sessionId=xxxx"/>

<SCRIPT type="text/javascript">

function checkjs() {

location.href="top.html?sessionId=xxxx";

}

</SCRIPT>

</HEAD>

<BODY bgcolor="#FFFFCC" text="#000000" onload="checkjs()">

---</BODY>

</HTML>

2%!!-%

イベントによって図2%H!!-B I関 数を実行し,2%2%2%項 で述べた方法で セッション>を 毎 回 変 更 し な が ら 接 続 を 維 持 す る .一 方! が 無 効 な ブ ラ ウ ザは ,関数 を 実行 せず に図2%タ グ で 記述 され た@:に リ クエ スト を 出 す.この と き リ ク エ スト す るB%に も同 様 のタ グ 記 述 が 存在 す る た め ,ブ ラ ウ ザ は 定 期 的 に 同 じ セッション>4/.に 送 信 し て 接 続 を 維 持 す る . 図2%9と 図2%の 例 で は ,2%2%%5項 で 述 べ た< !-%%!

7999番 ポ ー ト で 処 理 を す る が ,次 に 述 べ る 管 理 者 が 設 定 す る パ ラ メ ー タ に よって

< !-の 動 作 を 変 更 可 能 で あ る .

管理者 が設定する パラメー タ

2%4/.を動作させるために管理者が設定するパラメータを示す.管理者は実行 する環境に合わせてこれらのパラメータを設定する.特に4/.の動作を決定するのが

<;;A;);:A, ; );:Aであり,<;;A; );:Aの値 が小さければ小さいほど,正規端末のブラウザは頻繁にセッション>を送信するよう になり,負荷が増大する.また, ; );:Aは必ず<;;A; );:A よ り も 大 き い 値 に 設 定 す る 必 要 が あ り,さ も な け れ ば 接 続 中 の 端 末 は す べ て 切 断 さ れ て し ま う.:>@ /に 関 し て は ,ア ド レ ス ,キ ー ,ポ ー ト を コ ロ ン K区 切りにし,さらにその組合わせをセミコロン L区 切りにすることによって,複数の

:サー バ と 連 携 す る こ と が 可 能 で あ る .そ の 場 合4/.は ,先 頭 に 指 定 さ れ て い る サ ー バ か ら 順 に 認 証 を 始 め ,ど こ か の サ ー バ で 認 証 が 成 功 し た 時 点 で 認 証 成 功 と 判 断 す る .

2%管 理 者 が 設 定 す る パ ラ メ ー タ 設 定 す る パ ラ メ ー タ 名 パ ラ メ ー タ の 意 味

')) :) ' :!が 使 用 す る ポ ー ト

')) :) !が

使 用 す る ポ ー ト

<;;A;:) < !-が 使 用 す る ポ ー ト

<;;A;);:A ク ラ イ ア ン ト が セッション>

を 送 信 す る 間 隔 秒

; );:A < !-が

切 断 し た と 判 断 す る 間 隔 秒

'; < );:A < !-が

ポーリングチェックする間隔 秒

:>@ / :サー バ の ア ド レ ス , ポ ー ト と 認 証 の た め の キ ー

運用と評価

4/.の 基 本 性能 を 示 す ため に ,4/.単 体 で の 負荷 テ ス ト を行った .また 現 在大 学 の キャン パ ス で4/.を 導 入 し ,無 線 と 有 線 の ネット ワ ー ク 接 続 サ ー ビ ス を 運 用 し て い る .次 に そ れ ぞ れ に つ い て 述 べ る .

単体の負荷テスト

4/.単 体での性能を 測定するため ,我々は." !)C37 D 以 下,

)と 呼 ぶ を 使って 負 荷 テ ス ト を 行った .4/.の 方 式 で は ,接 続 す る ク ラ イ ア ン ト が 増 え た 場 合 ,最 も 性 能 に 影 響 が 出 る の が セッション>を 処 理 す る 部 分 以下,接続維持部分と呼ぶであるため,4/.へ の同時接続数を999ま で9ず つ増 や し ,接続 維 持 部 分 で1 秒 間 あ た りに4/.が 処 理 す る リ ク エス ト 数 を 測 定す る .2%2%2%1項 で 述 べ た よ う に ,4/.で は! が無 効 な ブ ラ ウ ザ を 使 用 さ れ た 場合でも,! の動作判定を行ったあとセッション>を固定して端末を接続さ せることができるため,測定にはセッション>を毎回変更する場合と固定の場合の

1種 類 で 行 う.また ,比 較対 象 と し て ,最も 処 理 が 軽い')):!が リ ダ イレ クト する部分 以 下,リダ イレクト部分と呼 ぶと,最も処理が 重いC38Dを 使った 認証 部分 でも同 様に秒 間あた りの リクエ スト 処理数 を測 定す る.使 用す るコン テ ン ツ の 大 き さ は 接 続 維 持 部 分 で187 ",認 証 部 分 で1%31 -"で あ る .表2%1に テ ス ト 環 境 を 示 し ,図2%1に 測 定 結 果 を 示 す.

2%1を 見 る と ,同 時 接 続 数 が2999ま で の 間 は リ ダ イ レ ク ト 部 分 も 接 続 維 持

ドキュメント内 <form action="/auth.html" method="post"> (ページ 38-49)

関連したドキュメント