2021/03/28(Sun)Android 11で追加されたEAP-TLS認証の新たな制約への対応方法
2021/03/28 16:05
EAP-PEAPはIDとパスワードを覚えるのが煩雑なので、EAP-TLSで運用していたわけだけど、この度Android 11に上げた端末(Pixel 3a, Pixel 3a XL)で証明書を入れ替えたところ繋がらなくなったので試行錯誤。その時のメモ。
Android 11で追加されたWi-FiにおけるEAP-TLS認証に対する制約
ググったところ、最初に出てきたのが、2020年12月頃のアップデートで「CA証明書を検証しない」オプションが塞がれたという情報。個人レベルで、機器毎に標準的なルート証明機関が署名しているCA認証局でわざわざ証明書を購入することはまあ無いだろうけど、かといって、ここまで手をかける人が「検証しない」オプションで単に済ませる人も居ないだろうし。「プライベートCA認証局の証明書を各端末にインストールする」だけで良いのだから、実はそこまで影響は無い。
問題は、その際に「ドメイン」欄の指定が必須となったこと。
CA認証局とユーザー証明書を追加して、IDにはRADIUS側で検証可能な文字列(自分の場合はホスト名/端末名に設定)を入れても、[保存]ボタンが押せない……。
Android 10までは任意フィールドだったし、今まで空欄で問題無かったので、指定しろと言われても何を入れて良いやら分からない。
では、自分の持っているドメインなどを適当に指定すれば良いのか?というと、保存はできるものの、それだけでは繋がらない……。
radiusdのログには
ERROR: (808) eap_tls: ERROR: TLS Alert read:fatal:internal error Auth: (808) Login incorrect (eap_tls: TLS Alert read:fatal:internal error): [pixel] (from client wifiap port 0 cli XX-XX-XX-XX-XX-XX)という様な内部エラーが記録されるが、はて……。
Android 10からアップデートした端末では…
少なくともAndroid 10の時は"ドメイン"が空でも繋がっており、そのままAndroid 11にアップグレードした端末も問題無くEAP-TLS接続できている。ただ、Wi-Fiの設定画面をあけると、
このようにドメイン欄が空欄であることを指摘され、保存ボタンが押せなくなっている。
ということは、この問題を解決しないと、新しい証明書に指定し直せないってこと……?(ガクガクブルブル
それはともかく、現行使用中の端末(Pixel 3a XL)の設定を、証明書入れ替えのために一度設定を消してしまったので、早く直さねば!
EAP-TLS設定の"ドメイン"は何を検証するのか?
鬼の検索の結果、幸いにも1ヶ月ほど前(2021年2月頃)にRedditに投稿してくれた先輩諸氏(その1, その2)のおかげで、やっとわかった。どうやら、RADIUSサーバーの証明書のCNまたはSAN(Subject Alternative Names)を検証するらしい。なるほど。
確かに、Authenticator(AP)はRADIUSとの通信を中継するだけなので、ドメインを見るとしたらそこが一番確実なのかも。
今までは、RADIUS用の証明書は適当に発行してプライベートCAで署名していただけだったので、SANを追加して再作成、再署名。
$ openssl x509 -in radius-cert.pem -text (snip) X509v3 Subject Alternative Name: DNS:kerosoft.com, DNS:sv.kerosoft.com, .... (snip)で、ドメイン名としてこの中の値を指定したところ、問題の端末(Pixel 3a, Pixel 3a XLともに)すんなり繋がるようになりましたとさ。
機種によって制約が違う?
Xperia 5 II (docomo版 SO-52A)もXperia 10からXperia 11にアップグレードした後に、SSIDの設定を開くと同様に"ドメイン"欄が必須と表示されるのだがしかし、新規作成の場合はドメイン欄が空欄でも[保存]ボタンを押すことが出来るようだ。
しかも、CA証明書に関して"証明書を検証しない"というオプションすらまだ有効の模様。(Androidセキュリティ アップデートが2021年3月1日レベルにて検証)
ということは、機種によってこの辺の検証の厳しさは異なるのかもしれないが、まあ本家本元そのものが作っているPixelは、それだけ開発側の仕様変更をダイレクトに反映しているのかもしれない。