Wi-Fiのアクセス制御は主に2つあり、無線LANで規格化された暗号化・アクセス制御方式(WPA2など)と、ブラウザでログイン・認証する方式である。今回はブラウザログイン方式の仕組みを、手元で分かるところまで調べてみた。
検証環境
PCはMac OS X Sierra (10.12.6)、Wi-FiにはKDDIのWi2を使用した。
ちなみにWから始まる私立大学の理工学生は無料でWi2の年間プリペイドコードが在籍期間中発行される。すごい!

手がかり
その1:強制的にログインページへ遷移する
公衆Wi-Fiの使い方で、一昔前までは(今もあるかもしれないが)「ブラウザを起動してください」との説明があったりした。
現在では接続した瞬間にOSが勝手にログイン画面を出したり、案内したりしてくれるが、ブラウザで適当な画面を出そうとすると、なるほど確かにリダイレクトされる。
ここでChromeなどのブラウザでhttpsのページにアクセスしようとするとsslエラーのクッション画面が表示されるが、無視してアクセスすると同様にログイン画面にリダイレクトされた。リダイレクトさせたゲートウェイが別ドメインのssl通信に噛んできたからだろう。
また、自分が聞き覚えのあるガイダンスが「ブラウザを起動してください」だけで「適当なページにアクセスしてください」ではないのは、昔のInternet Explorerが起動時にmsnなどのホームページを表示していたためだろうと推測がつく。
確認のためにcurlで適当なURLでアクセスし、リダイレクトをトレースしてみた。
(一部マスキング済み)
$ curl -k -v -L -D wi2_header https://example.com/
$ cat wi2_header
HTTP/1.1 302 Found
Location: http://example.com/?reason=Un-Auth-SSL-Captive&url=https%3A%2F%2Fexample.com%2F
Connection: close
Content-Length: 0
HTTP/1.1 302 Found
Location: https://service.wi2.ne.jp/wi2net/AutoLogin/2/?nbiIP=AA.AA.AA.AA&client_mac=bb:bb:bb:bb:bb:bb&reason=Un-Auth-SSL-Captive&wlanName=Wi2premium_club&dn=CCCCCCCCCCCC.wi-fi.kddi.com&ssid=Wi2premium_club&mac=dd:dd:dd:dd:dd:dd&url=https%3A%2F%2Fexample.com%2F&proxy=0&vlan=128&wlan=60&sip=CCCCCCCCCCCC.wi-fi.kddi.com&zoneName=EEEEEEEEEEEEEEEEEEEEEEEE&StartURL=https%3A%2F%2Fservice.wi2.ne.jp%2Fwi2net%2FAutoLogin%2F2%2F%253Frole%3Dfull&uip=FF.FF.FF.FF
Connection: close
Content-Length: 0
HTTP/1.1 302 Found
Date: Fri, 15 Mar 2019 07:11:05 GMT
Server: Apache
P3P: CP='UNI CUR OUR'
Location: /wi2net/Login/2/?SSID=GGGGGGGGGGGGGGGGGGGGGGGGGGG
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Set-Cookie: SSID=HHHHHHHHHHHHHHHHHHHHHHHHHHH; expires=Fri, 15 Mar 2019 08:11:05 GMT; path=/
Set-Cookie: SSID=GGGGGGGGGGGGGGGGGGGGGGGGGGG; expires=Fri, 15 Mar 2019 08:11:05 GMT; path=/
HTTP/1.1 200 OK
Date: Fri, 15 Mar 2019 07:11:07 GMT
Server: Apache
P3P: CP='UNI CUR OUR'
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
要するに以下の順序でアクセスしている。
- http://example.com(システムによって強制302)
- http://example.com?reason=Un-Auth-SSL-Captive&url=…(システムによって強制302)
- https://service.wi2.ne.jp/wi2net/AutoLogin?…
- https://service.wi2.ne.jp/wi2net/Login?SSID=….
なんでexample.comから同じexample.comにリダイレクトさせたんだろうかと思ったけど、AutoLoginのURLにGETパラメータをリファラとして認識させるためなのかな。
その2:captive.apple.com
iPhoneでもMacでも、Wi2のAPにつなぐと自動でログイン画面が出るのだが、そのURL表示欄に一瞬 “captive.apple.com” と表示される。
このURLに後でアクセスしてみたところ、200 OKとともにSuccessの文字列が帰ってくるだけだった。
ここからわかること
ちゃちな手がかりと考察だが、以下の流れで動作していることがわかる。
- APに接続する
- AppleのOSはすかさずcaptive.apple.comへHTTPアクセスをする
- 200が帰ってくれば正常
- ログイン制のNWは、中継するゲートウェイが強制的に302を返す
- この時OSはログインが要求されていると判断し、ポップアップでログイン画面を出す
Captive Portal
今回しきりに出てきたcaptiveについて調べたら、Captive Portalという言葉がひっかかった。
Captive Portalとは、HTTPクライアントがインターネットを利用する前に、ネットワーク上の特定のWEBの参照(通常は認証目的で)を強制する技術である。
https://www.designet.co.jp/faq/term/?id=Q2FwdGl2ZSBQb3J0YWw
ついでにCaptive PortalでググるとCiscoのドキュメントが出てきたりする。やっぱり製品に簡単に設定できるようになってるのね。すごい。
まとめ
さすがに認証技術について手元から調べることはできなかったが、Captive Portalの名前や仕組みだけでもわかったのは嬉しい。「公衆無線Wi-Fi ログイン 仕組み」とか調べても技術的なことが簡単には引っかからなかったので、何かを調べるために専門的な単語をちゃんと知っておくのは重要だと感じた。
もともとこれについて調べようと思ったのは、Wi2のAPに接続してもログイン画面が出てこない現象が頻発するし、よくあるガイダンス(ブラウザを開きましょう)通りWebサイト(https)にアクセスしようとしたら証明書エラーが出てSafariでは先に進めないし、どうすれば良いんだと思ったのがきっかけだった。
適当な「http」サイトにアクセスすれば大丈夫だったのね。
困ったら captive apple .com (575)
コメント
通りがかりの者です。
free wi-fi 認証 仕組み で検索してたらこのページを見つけました。
APに接続しただけで、認証画面にリダイレクトさせる仕組みが知りたかった次第です。
OSがらみとシスコさんのおかげな訳ですね。
あまりこんな事調べる人も少ないでしょうし、詳しいwebページも無く、見つけた時は「これだぁ!」と感動しました。
最近の疑問が解決しました。
ありがとうごさいました。