Unyablog.

のにれんのブログ

各 OS の 802.1X 認証における RADIUS サーバーの検証方法

最近 802.1X 認証(WPA2 Enterprise)を構築していた。野良 RADIUS サーバーに Credentail を渡さないためには、サーバー証明書などで RADIUS サーバーの検証を行うことが必要である。 各 OS でどう検証できるかを調べたのでメモ。

今回はクライアントにサーバーの証明書をインストールしない。また、EAP 方式は EAP-TTLS-PAP / EAP-TTLS-GTC。

Android

Android 7.0 より前は、自分でサーバーの証明書をインストールするしか検証方法がなかった。何も検証せずに使ってる人が多いのではないか…。

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 未満は諦めるかサーバーの証明書を配布する

と良さそうだった。

*1:困ってる人は割といそう。 https://seclists.org/educause/2017/q4/54 を読んでやや納得した。

*2:アダプタ設定から辿れる

*3:タイムアウトが非常に早く、確認しているとたいてい再認証が必要になるのが玉にキズ