主な名称
IEEE 802.1X (dot1x):認証の仕組み
認証が成功したら 通信を許可する(認証が成功するまで通信をさせない)
Radius:良くネットワーク機器の認証に使用するプロトコルです。
EAPを乗せて、サーバーまでの認証をやり取りする通信仕様(輸送トラックみたいな物)
EAP (Extensible Authentication Protocol):認証の「共通フォーマット」
ユーザー名やパスワード、証明書など認証データをやり取りするための共通の型(封筒みたいな物)
EAP-PEAP (Protected EAP):ID/PWによる認証
EAPの「中身(認証方式)」の1つで、セキュリティを実現するための手法。
生のパスワードをEAPで送ると盗聴される危険があるので、TLSで「外側の暗号化トンネル」を作り、
その中で「内側の認証(MSCHAPv2など)」を行う
EAP-TLS:証明書による認証
クライアント証明書での認証を実施。認証の中で最も安全と言われる方式。
MSCHAPv2:マイクロソフトが開発した「チャレンジ・レスポンス方式」の認証プロトコル。
仕組みは、サーバーがランダムな数字を送り、クライアントは「自分のパスワード」と
「ランダムな数字」を組み合わせて計算し、その結果だけを送り返す。
サーバー側でも同じ計算をし、答えが合えば「パスワードを知っている=本人」と認めます。
計算結果だけを送信するので生のパスワードをインターネットに流さないで済む
主な機器の役割名称
サプリカント (Supplicant): 認証を依頼する機器。
PCやスマホなどクライアント側にインストールするソフトウェア。
ほぼ最近のPC・スマホには標準でインストールされています。
オーセンティケータ (Authenticator): 無線AP・スイッチでサプリカントと認証サーバの間をRadiusで中継する。
IEEE802.1Xに対応したLANスイッチまたは無線AP
認証サーバー (Authentication Server): 認証の合否を判定するサーバ 今回は FreeRADIUS
EAP-PEAPでのRADIUS認証フロー
PCがAPのSSIDに接続してから、認証が完了するまでの流れ

パケットキャプチャとFreeRadiusのデバックで内容を確認
キャプチャはPC側ではかなり面倒なので今回のはRADIUSサーバ側でのキャプチャです
① APが広報しているSSIDのビーコンを受信し、PCで接続を実行
APが「それなら認証が必要です。まずは自己紹介(Identity)をしてください」と EAP-Request を送る。
② PCでID・PWを入力
③ PCから「私は XXユーザです」 という情報を EAP封筒 に入れて送信。
④ APはEAPをRADIUSパケットにまとめて設定した指定のRADIUSサーバへ送信
⑤ RADIUSサーバがPCに対して、「まずはMD5方式で認証してみない?」と提案を送信
※FreeRadiusの初期値は「Type: MD5-Challenge」なのでMD5となってます
⑥ APからRADIUSパケットからEAPを取り出してPCへ送信

⑦ PCから使用したいEAPのTypeを送信
今回の例では、Type: Legacy Nak (Response Only) (3) なので、 PCがサーバに対して「いいえ(Nak)、MD5方式は嫌です」と断り、Desired Auth Type にて Protected EAP (EAP-PEAP) (25) となっているので、PCは「PEAP(Type 25)でお願い」とリクエストを返します。
⑧ EAPをRADIUSパケットにして送信
⑨ サーバからStart ビット(フラグ)が立っているので、「PEAPでOK、準備ができたよ。TLSハンドシェイクを始めよう」というサーバからクライアントへ連絡
⑩ RADIUSパケットをEAPにして送信

⑪ PCから、TLS Client Hello というメッセージを送る。
「私はこの暗号化方式が使えます」「このバージョンのTLSで話せます」という提案をします。
⑫ EAPをRADIUSパケットにして送信

⑬ サーバからServerHeloでサーバ証明書や鍵などを送信
⑭ RADIUSパケットをEAPにして送信

⑮ PCがこの証明書を認めたら、「じゃあ暗号化を開始します!」と返事を送信
※証明書が信頼できない時は下記の注意の画面が出る
⑯ EAPをRADIUSパケットにして送信


⑰ サーバよりTLSハンドシェイクを終了し、ここからは暗号通信しますと連絡する
⑱ RADIUSパケットをEAPにして送信

暗号化されちゃうので、ここからはデバッグログで確認
⑱ PCから「IDとサーバから受け取ったチャレンジ数値とPWを組み合わせた値」を送信
⑲ EAPをRADIUSパケットにして送信
⑳ サーバからPCへ認証確認できたよと送信
※ここではまだ、パケットはAccess-Challengeです
Tunneled authentication was successful
PC が自分の PW と Challenge を合体させてハッシュ化した値を送り、
サーバでも同じ計算をして一致したので OKと判断
㉑ RADIUSパケットをEAPにして送信

㉒ PCから「認証が成功したことを確認した」と返信
㉓ EAPをRADIUSパケットにして送信
㉔ PCから認証成功を受けった返事を受信したので、RADIUS認証を終了するので、「Access-Accept」を送信
Received EAP-TLV response
PCから認証成功を受けった返事を受信
eap_peap: Success
PEAPセッションが成功した
Login OK
Sent Access-Accept
認証処理終了として送信
㉕ RADIUSパケットをEAPにして送信




コメント