WiFiAPを用いてIEEE802.1x認証(EAP-PEAP)を試してみたいと思います。
サプリカントはWindows7端末、オーセンティケータはArubaのWiFiAPを用います。認証サーバはCentOS6にfreeRadisusを設定し、プライベート認証局を構築しました。
プライベート認証局の構築は下記のサイトを参考にさせていただきました。
http://qiita.com/T_Tsan/items/632e83167bbc3a90ad4e
■freeRadiusの設定
・サーバ秘密鍵: /etc/pki/ssl/server.key
・サーバ証明書: /etc/pki/ssl/server.crt
・CA証明書: /etc/pki/CA/cacert.pem
[/etc/raddb/eap.conf]
eap { default_eap_type = peap tls { certdir = /etc/pki/ssl cadir = /etc/pki/CA private_key_file = ${certdir}/server.key certificate_file = ${certdir}/server.crt CA_file = ${cadir}/cacert.pem dh_file = ${certdir}/dh2048.pem random_file = /dev/urandom } peap { default_eap_type = mschapv2 copy_request_to_tunnel = yes use_tunneled_reply = yes virtual_server = "inner-tunnel" soh = yes soh_virtual_server = "soh-server" } mschapv2 { send_error = no } }
[/etc/raddb/users]
test Cleartext-Password:="test"
[/etc/raddb/radiusd.conf]
log { auth = yes }
RADIUSの起動
openssl dsaparam -out dh2048.pem 2048 : DSAパラメータファイルの作成 /usr/sbin/radiusd -X :デバッグモードで起動
■サプリカントの設定
ルート証明書は認証局からダウンロードしてPCにインストール、これを設定します。
■認証
該当するSSIDを選択するとオーセンティケータとEAPOLによる通信を開始します。EAPOLはLAN上でEAPパケットをMACフレームのデータ部分に格納してややとりするための仕様で、イーサネットタイプ「888E」を用います。
[EAPPOLフレーム]
| DA | SA |Type(888e) | Version| タイプ| 長さ | データ(EAPパケット) | FCS |
↓
|EAP Code| ID | 長さ | EAPデータ |
※タイプ 1:= EAP-Packet / 2 = EAPOL-Start / 3=EAPOL-Logoff / 4=EAPOL-Key / …….
オーセンティケータはEAPOLからEAPを取り出し、RADIUSに移し替えて認証サーバと通信を行います。RADIUSの属性データ部分で属性番号79としてEAPが定義されています。
下図はオーセンティケータから認証サーバへのRADISU(Access-Reaurst)。属性データ部分にEAP情報が含まれておりEAPレスポンス、TypeはIdentityを送付している様子が見てとれます。
これに対し認証サーバはEAP-PEAPによる認証をリクエスト。
ここからSSL認証をするために、EAPデータ部分にClient Helloを格納して認証サーバへ送付。
認証サーバはプライベートCAにより署名されたサーバ証明書をサプリカントへ送付。
SSLでのトンネルが確立されると暗号化された状態でMSCHAPによる認証を行っている模様。
認証が成功しRADIUSが認証成功を返却。
認証成功を受け取ったオーセンティケータはEAPOLタイプ「EAPOL-Key」で暗号通信用の鍵情報を通知します。
※EAP-PEAPのシーケンスはここがわかりやすいです。
https://mrncciew.files.wordpress.com/2014/08/eap-peap-20.png