各 OS の 802.1X 認証における RADIUS サーバーの検証方法
最近 802.1X 認証(WPA2 Enterprise)を構築していた。野良 RADIUS サーバーに Credentail を渡さないためには、サーバー証明書などで RADIUS サーバーの検証を行うことが必要である。 各 OS でどう検証できるかを調べたのでメモ。
今回はクライアントにサーバーの証明書をインストールしない。また、EAP 方式は EAP-TTLS-PAP / EAP-TTLS-GTC。
Android
Android 7.0 より前は、自分でサーバーのCA証明書をインストールするしか検証方法がなかった。何も検証せずに使ってる人が多いのではないか…。
Android 7.0 以降は CA 証明書に「システム証明書」が使えるようになり、RADIUS サーバーの証明書をルート証明書で検証できるようになった。
システム証明書で検証する場合はドメイン名の指定が必須になる。
サーバーの証明書が指定したドメイン名であり、かつルート証明書で検証できれば接続される。
iOS
iOS 12 で検証。
802.1x 認証の場合、ルート証明書に関わらず サーバーの証明書を信頼するかどうかのダイアログが出る。
この時、サーバー証明書がルート証明書で検証できるかどうかが分からない *1 ので、SHA256 fingerprint などを頼りにユーザーが判断することになる。
管理者は SHA256 fingerprint とドメイン名(CN)を提供すれば良いと思う。
Windows 10
記事執筆時点での最新バージョンで検証。
Windows 10 では、ルート証明書での検証はしてくれるが、接続時に証明書の SHA256 fingerprint しか確認できない。
ドメイン名を指定するには、古い設定画面からドメイン名を入力し、信頼するルート証明書を選択する必要がある。この画面に行くのはなかなか難しい *2 ので、通常は SHA256 fingerprint を見てもらうことになりそう。
macOS
macOS 10.14 で検証。
macOS は接続時に証明書の確認画面が出る。そこには
などが見れる。
なので、ユーザーにはドメイン名と、証明書が信頼されているかの確認をして接続してもらうと良い *3 。
まとめ
OS | ルート証明書での検証(ドメイン名指定) | SHA256 fingerprint 表示 |
---|---|---|
Android(7.0 以降) | o | x |
iOS | x | o |
Windows 10 | △ | o |
macOS | o | o |
となるので、管理者は
- ルート証明書で検証できる証明書を LE 等で作る
- ドメイン名 (または CN)と SHA256 Fingerprint を提供して、ユーザーに検証するよう呼びかける
- Android 7.0 未満は諦めるかサーバーのCA証明書を配布する
と良さそうだった。
*1:困ってる人は割といそう。 https://seclists.org/educause/2017/q4/54 を読んでやや納得した。
*2:アダプタ設定から辿れる