SHARP製のAndroid端末で802.1X認証のWi-Fi接続を行う際に、RADIUSサーバのサーバ証明書の検証を強制されるため、これを発行した認証局(CA)のルート証明書(以下、CA証明書)の端末へのインストールが必要となる場合がある。
サーバ証明書の検証は本来、「しなければならない」(MUST)ではないはずだが、SHARPはかねてから端末に独自仕様を実装しているため、このような動き(CA証明書をインストールして、サーバ証明書の検証を行うことが必須)となっている。*1
このため、例えば認証に802.1X(多くはEAP-PEAP)を使用している国際無線LANローミング基盤 eduroam (http://www.eduroam.jp/) を整備している大学等では、SHARPのAndroid機の接続について、個別に注意喚起を行っている。
eduroam.jpの案内
神戸大学の案内
北海道大学の案内
しかし最近、SHARP製のAndroid機においても、CA証明書の端末へのインストール無しに、802.1x(EAP-PEAP)認証の無線LANへ接続できるクライアントが存在している。
このため、できるだけ多くのSHARP製Android機種を集め、挙動をまとめてみることにした。
※ 個人の理解を深めることを目的としたまとめです。誤りや、用語の使い方がおかしい点などありましたらご指摘いただければ幸いです。
10/17追記 @hgot07 先生にありがたいつっこみをいただいた。
ので、今更だけど勉強しなおしてみた。EAP-PEAP と書いていたが、PEAP は Protected Extensible Authentication Protocol
つまり Protected EAP なので、頭にEAP-とつけてるのは「馬から落馬」みたいな表現になるのかな?
「正しいEAP-PEAPのID、パスワードを入力しても〜」というのは、直すとすると「正しい PEAP-MSCHAP v2のID、パスワードを入力しても〜」かな?
しばらく恥を忍んで、修正しないでおきます。
用語の使い方って大事だと思う。
■EAP-TLS (RADIUSサーバとクライアントの相互で証明書による認証を行う)
○EAP-TLS
TLSって何 = Transport Layer Security
⇒ 慶應義塾大学のワイヤレスネットワーク 「keiomobile2」
http://www.mita.itc.keio.ac.jp/ja/net_connect_keiomobile2.html
慶應ID(共通認証システム)を基盤として発行された証明書 をEAP-TLS認証に利用している。(2011年頃〜)
■TTLS (クライアント側は証明書を発行せず、その代わりにユーザ名とパスワードを用いて認証を行う)
TTLSって何 = Tunneled TLS
EAP-TLSの拡張版がTTLS。
サーバ側にのみ電子証明書を準備してサーバ認証済みのTLS通信路を構築し、その暗号化通信路を通してクライアントを認証する。
暗号化通信路を通るので認証プロトコル(Inner Authentication)は平文でもいい。
RFC5281 では Inner Authentication プロトコルとして PAP, CHAP, MSCHAP, MSCHAPv2 あるいは EAP が列挙されている。
TTLSのInner AuthenticationにEAPを使ったのがPEAPってこと??
○TTLS (PAP)
PAPって何 = Password Authentication Protocol (パスワード認証)
⇒ OCN モバイル ONEの期間限定トライアルで提供されているWi-Fiスポット
「0001_Secured_Wifi」
https://support.ntt.com/mobile-one/faq/detail/pid23000005jw
○TTLS (MS-CHAPv2)
MS-CHAPv2って何 = Microsoft CHAP version 2
CHAPって何 = Challenge-Handshake Authentication Protocol (チャレンジ/レスポンス認証)
⇒ eduroam 代理認証システム から発行されたアカウントは この方式でも認証できた。
eduroam の技術情報 FreeRADIUS3の導入 ( http://www.eduroam.jp/docs/conf-freeradius3.html )
■PEAP (PEAP で使用する EAP の種類(認証の種類)は、EAP-MS-CHAP v2 と EAP-TLS が選択できる)
サーバ側にのみ電子証明書を準備してサーバ認証済みのTLS通信路を構築し、その暗号化通信路を通してさらにEAP通信を行い、クライアントを認証する。
⇒ TTLSと何が違うの
PEAP と TTLS の違いは、暗号トンネル上のプロトコルとして TTLS が RADIUS/Diameter の枠組みを使っているのに対し、PEAP は EAP を使っている
○PEAP-MSCHAP v2
EAP-MS-CHAP v2 を使用する PEAP。
PEAP-MSCHAP v2 では、認証に証明書とユーザー名/パスワードを使用。
RADIUSサーバーがクライアントを認証する時はユーザー名/パスワードを使用。
ユーザー名/パスワードの情報は、EAP-MSCHAP v2で暗号化。
クライアントがRADIUSサーバーを認証するときは証明書を使用。
⇒ 本検証で構築した方式。RADIUSサーバにはプライベートCAから発行した証明書を用いた。
⇒ 世界のeduroamでは、PEAPによるID/パスワード認証方式が広く用いられている。
⇒ EAP-TLSの例として挙げた 慶應義塾大学のワイヤレスネットワーク 「keiomobile2」
http://www.mita.itc.keio.ac.jp/ja/net_connect_keiomobile2_peap.html
慶應ID(共通認証システム)を利用できない人、または証明書方式が利用できない機器向けに
PEAP-MSCHAP v2 でも認証できるようにしたようだ(2014/3〜)
http://www.mita.itc.keio.ac.jp/ja/feature_2013_2.html
⇒ NTT Docomoの公衆無線LANサービス(0001docomo)は 、最近の機種ではEAP-SIM(SIMカードによる認証)に
対応しているが、PEAPも利用可能である。
https://www.nttdocomo.co.jp/binary/pdf/service/data/docomo_wifi/usage/other/windows7_auto_login.pdf
○PEAP-TLS
EAP-TLS を使用する PEAP。
https://www.fmworld.net/biz/fmv/product/hard/network/manual/security/manual/chap100009.html
PEAP-TLS では、EAP-TLSと同様に、RADIUSサーバーとクライアントの相互で証明書による認証を行う。
PEAP-TLS では暗号化情報がカプセル化されるため、EAP-TLSよりセキュリティレベルが高くなる。
https://technet.microsoft.com/ja-jp/library/cc754179.aspx
Active Directory 証明書サービス (AD CS) で公開キー基盤 (PKI) を展開する場合は、EAP-TLS を使用する PEAP (PEAP-TLS) を使用できます。
⇒ 社内の無線LANとか?身の回りに環境がない。
本検証環境について
本検証では、FreeRADIUS 3.0.9に自己署名のプライベート認証局より発行したサーバ証明書を設定した上で、EAP-PEAP認証で構築した無線LAN環境で行っている(いずれもSHA-1)。
あらかじめプライベートCA証明書を、一度Windowsに読み込み(証明書ストアは「信頼されたルート証明機関」を選択)、certmgr.mscから「信頼されたルート証明機関」に配置された当該証明書を、「Base 64 encoded X.509 (.CER)」としてエクスポートし、拡張子を .crt に変更したものを用意した。
このプライベートCA証明書へのリンクを検証機からアクセス可能なWEBサーバ上に設置し、検証機からキャリア回線または802.1Xではない無線LANを使用した。
(※CA証明書を事前にPC等でカードリーダを使用してMicroSDに保存しておき、端末で読み込むことも可能であり、実際の運用では証明書の安全な配布という点からはそのような方法が推奨される。 あくまで本検証はSHARPのAndroid機の挙動の調査が目的であるため、このような方法を取った。)
■そもそも、AndroidでユーザがWi-Fi用にインストールしたCA証明書はどこに保存されるのか?
インストールするCA証明書が、パブリックCAであるか、プライベートCAであるかで挙動が異なるようだ。
(Android 4.1.2、4.4.2、5.0で確認)
パブリックCA
SECOM TrustのSecurity Communication RootCA1の例
1. SECOM TrustのSecurity Communication RootCA1は、最初から「設定→ロックとセキュリティ→安全な認証情報の使用(信頼できるCA証明書を表示する)→システム」には存在する。
2. SCRoot1caをインストールしないと、警告("正しいサーバに接続されているか検証されません〜")が出るものの接続可。
3. SCRoot1caをインストールしていないと、802.1Xの接続設定で証明書を選択できない。
4. SCRoot1caを"SCRoot1ca"として保存しても、「安全な認証情報の使用→ユーザ」 にはインストールした証明書が表示されない。
5. 802.1Xの接続設定のCA証明書の選択プルダウンには、ユーザがつけた名前で表示される。
(SCRoot1caを"puyo"として保存すると、プルダウンには"puyo"として表示される。)
6. インストールしたパブリックCA証明書を確認できる画面がなく、個別に削除する方法がない。
「認証ストレージの消去」で認証ストレージごと消すと802.1Xの接続設定でCA証明書を選択できなくなる。
7. 「安全な認証情報の使用→システム」に最初からインストールされているSecurity Communication RootCA1は、個別に無効にすることができるが、無効にしても802.1Xの設定からは引き続き参照できる。
Android 5.0を搭載したDocomo SC-01Fでも同様の動きをした。
念のため、SCRoot1caのインストール方法をブラウザからではなく、MicroSDにPCで保存したものを読み込む方法に変えてみたが、挙動に変化は無かった。
Nexusのヘルプには、上記のような挙動については書かれていないが、SHARP機特有の挙動、という訳ではないようだ。
Add & remove certificates - Nexus Help
System displays certificate authority (CA) certificates that are permanently installed in the ROM of your phone.
User displays any CA certificates that you have installed yourself, for example in the process of installing a client certificate.
プライベートCA
プライベートCA局(hogeCA)の例
1. 当然「安全な認証情報の使用→システム」には存在しない。
2. hogeCAをインストールしないと、警告("正しいサーバに接続されているか検証されません〜")が出るものの接続可。
3. hogeCAをインストールしていないと、802.1Xの接続設定で証明書を選択できない。
4. hogeCAを"hogeCA"として保存すると、「安全な認証情報の使用→ユーザ」 にインストールした証明書が表示される。
5. 802.1Xの接続設定のCA証明書の選択プルダウンには、ユーザがつけた名前で表示される。
(hogeCAを"puyo"として保存すると、プルダウンには"puyo"として表示される。)
6. インストールした自己署名CA証明書は、「安全な認証情報の使用→ユーザ」から選択して個別に削除できるが、削除しても802.1Xの設定からは引き続きhogaCAが選択できる。
「認証ストレージの消去」認証ストレージごと消すと802.1Xの接続設定でCA証明書を選択できなくなる。
本検証の最大の疑問。どっかにWi-Fi用の認証情報ストレージ的なものが独立してある? 詳しい方がいたら教えてほしい。
検証まとめ
大まかに分けて、2.x系、4.0系〜4.2系、4.4系で挙動が異なる。SHARPのAndroid端末においては、4.4系で大きく挙動が変わったようだ。(Android的には4.3から?)
5.x系 (Docomo SH-03Gなど)、6.x系(今後SH-01H等にアップデート配信予定)は未検証。
Androidバージョン
|
検証機の型名
|
検証機の発売開始日
|
CA証明書インストール
|
制限事項
|
2.2.2
|
Docomo SH-03C
(Build 02.01.04)
|
2010/12/3
|
必須
(インストールにMicroSDは必須ではない)
|
いったん接続完了後に端末を再起動すると、自動で再接続されない。 SSIDを選択して接続を手動で行う際に「認証情報ストレージ」のパスワード入力が求められる。
|
2.3.5
|
AU IS14SH
(Build 01.00.06)
|
2011/12/23
|
4.0.4
|
SoftBank 102SH
(Build S1040)
|
2011/12/16
(2012/9/6 4.0.4アップデート開始)
|
いったん接続完了後に端末を再起動すると、自動で再接続されない。 画面ロック解除後に接続状態を確認すると「認証に問題」となっている。 SSIDを選択して手動で接続を行うと再接続される。
「画面のロック」が「パターン」「ロックNo.」「パスワード」のいずれかのみに制限される。 「なし」「スライド」(SH-02Eは「スライドまたはタッチ」)「顔認証」は使用不可となる。
|
4.1.2
|
Docomo SH-02E*2
(Build. 02.00.06)
|
2012/11/29
|
4.2.2
|
Docomo SH-06E*3
(Build 01.00.10)
|
2013/5/24
|
4.4.2
|
Docomo SH-04F*4
(Build 01.01.08)
|
2014/5/23
|
必須ではない
(インストールしないと 初回接続時に警告表示)
|
CA証明書をインストールしない場合、インストールした場合のいずれにおいても接続中の状態で端末を再起動すると、画面ロック中の状態であっても自動で再接続される。
CA証明書をインストールしない場合、一旦接続が確立した状態から「切断」を実行すると、再度手動で接続を行った際にCA証明書が指定されていない旨の警告が改めて表示される。
プライベートCAのCA証明書をインストールすると、通知領域に信頼できる認証情報が端末にインストールされている旨の警告が表示される。
|
AU SHL25
(Build )
|
2014/6/13
|
■事前準備
CA証明書が格納される認証情報ストレージを有効にするために、「設定」→「その他の設定」→「ロックとセキュリティ」→「画面のロック」を「パターン」「ロックNo.」「パスワード」のいずれかにする。「なし」「スライド」「顔認証」は使用不可。あらかじめ有効にしておかない場合、設定中にロック方式を変更し、認証情報ストレージを有効にするよう促される。
■CA証明書をインストールしない場合
正しいEAP-PEAPのID、パスワードを入力しても、「認証に問題」と表示され、接続が完了しない。
■設定方法
1. 端末でブラウザを起動し、CA証明書が置かれたURLを開いてCA証明書へのリンクをクリックする。
下記ダイアログが開くので、パッケージの内容が「CA証明書」となっていることを確認の上、適当に名前を入力して「OK」をクリックし、インストールされたダイアログが表示されることを確認する。
事前準備の通り「認証情報ストレージ」が有効になっていないと、この時点で画面ロック方式を変更し、認証情報ストレージを有効にするよう求められる。
2. 無線LANの接続設定にて、SSIDを選択し、CA証明書をクリックすると、上記でインストールしたCA証明書がプルダウンに表示されるので選択する。
3. EAP-PEAPのID、パスワードを入力し、接続。
■制限事項
いったん接続完了後に端末を再起動すると、自動で再接続されない。
画面ロック解除後に接続状態を確認すると「認証に問題」となっている。
SSIDを選択して手動で接続を行うと再接続される。
■事前準備
CA証明書が格納される認証情報ストレージを有効にするために、「設定」→「その他の設定」→「ロックとセキュリティ」→「画面のロック」を「パターン」「ロックNo.」「パスワード」のいずれかにする。「なし」「スライドまたはタッチ」「顔認証」は使用不可。あらかじめ有効にしておかない場合、設定中にロック方式を変更し、認証情報ストレージを有効にするよう促される。
■CA証明書をインストールしない場合
正しいEAP-PEAPのID、パスワードを入力しても、「認証に問題」と表示され、接続が完了しない。
■設定方法
1. 端末でブラウザを起動し、CA証明書が置かれたURLを開いてCA証明書へのリンクをクリックする。
下記ダイアログが開くので、パッケージの内容が「CA証明書」となっていることを確認の上、適当に名前を入力して「OK」をクリックし、インストールされたダイアログが表示されることを確認する。
事前準備の通り「認証情報ストレージ」が有効になっていないと、この時点で画面ロック方式を変更し、認証情報ストレージを有効にするよう求められる。
2. 無線LANの接続設定にて、SSIDを選択し、CA証明書をクリックすると、上記でインストールしたCA証明書がプルダウンに表示されるので選択する。
3. EAP-PEAPのID、パスワードを入力し、接続。
■制限事項
いったん接続完了後に端末を再起動すると、自動で再接続されない。
画面ロック解除後に接続状態を確認すると「認証に問題」となっている。
SSIDを選択して手動で接続を行うと再接続される。
■事前準備
CA証明書が格納される認証情報ストレージを有効にするために、「設定」→「その他の設定」→「ロックとセキュリティ」→「画面のロック」を「パターン」「ロックNo.」「パスワード」のいずれかにする。「なし」「スライドまたはタッチ」「顔認証」は使用不可。あらかじめ有効にしておかない場合、設定中にロック方式を変更し、認証情報ストレージを有効にするよう促される。
■CA証明書をインストールしない場合
正しいEAP-PEAPのID、パスワードを入力しても、「認証に問題」と表示され、接続が完了しない。
■設定方法
1. 端末でブラウザを起動し、CA証明書が置かれたURLを開いてCA証明書へのリンクをクリックする。
下記ダイアログが開くので、パッケージの内容が「CA証明書」となっていることを確認の上、英字と数字のみの名前を入力して「OK」をクリックし、インストールされたダイアログが表示されることを確認する。
事前準備の通り「認証情報ストレージ」が有効になっていないと、この時点で画面ロック方式を変更し、認証情報ストレージを有効にするよう求められる。
2. 無線LANの接続設定にて、SSIDを選択し、CA証明書をクリックすると、上記でインストールしたCA証明書がプルダウンに表示されるので選択する。
3. EAP-PEAPのID、パスワードを入力し、接続。
■制限事項
いったん接続完了後に端末を再起動すると、自動で再接続されない。
画面ロック解除後に接続状態を確認すると「認証に問題」となっている。
SSIDを選択して手動で接続を行うと再接続される。
ここから挙動が大きく変わった世代
Android 4.4.2 を搭載するDocomo SH-04F/AU SHL25(画面はSH-04F)
■事前準備
CA証明書が格納される認証情報ストレージを有効にするために、「設定」→「その他の設定」→「ロックとセキュリティ」→「画面のロック」を「パターン」「ロックNo.」「パスワード」のいずれかにする。「なし」「スライドまたはタッチ」「顔認証」は使用不可。あらかじめ有効にしておかない場合、設定中にロック方式を変更し、認証情報ストレージを有効にするよう促される。
■CA証明書をインストールしない場合
正しいEAP-PEAPのID、パスワードを入力して接続を試みると、下記ダイアログが表示される。
?確認
CA証明書が指定されていません。
CA証明書が指定されていない場合、正しいサーバに接続されているか検証されません。現在の設定で接続しますか?
「いいえ」「はい」
「はい」をクリックすると、CA証明書のインストールなしに接続が完了する。
■CA証明書をインストールする場合の設定方法
1. 端末でブラウザを起動し、CA証明書が置かれたURLを開いてCA証明書へのリンクをクリックする。
下記ダイアログが開くので、パッケージの内容が「CA証明書」となっていることを確認の上、英字と数字のみの名前を入力する。
「認証情報の使用」を初期値の「VPNとアプリ」から「WiFi」に変更する。
「OK」をクリックし、インストールされたダイアログが表示されることを確認する。
事前準備の通り「認証情報ストレージ」が有効になっていないと、この時点で画面ロック方式を変更し、認証情報ストレージを有効にするよう求められる。
2. 無線LANの接続設定にて、SSIDを選択し、CA証明書をクリックすると、上記でインストールしたCA証明書がプルダウンに表示されるので選択する。
3. EAP-PEAPのID、パスワードを入力し、接続。
■制限事項
CA証明書をインストールしない場合、インストールした場合のいずれにおいても、接続中の状態で端末を再起動すると、画面ロック中の状態であっても自動で再接続される。
CA証明書をインストールしない場合、一旦接続が確立した状態から「切断」を実行すると、再度手動で接続を行った際にCA証明書が指定されていない旨の警告が改めて表示される。
プライベートCA局のCA証明書をインストールした場合、通知領域に下記の警告が表示される。
(SCRoot1ca等のパブリックCAについては警告が表示されなかった)
! ネットワーク監視
第三者があなたのネットワークアクティビティ(メール、アプリ、保護されたウェブサイトなど)を監視できます。
これは、信頼できる認証情報が端末にインストールされているためです。
「信頼できる認証情報を確認」
■どないせいっちゅうねん?
プライベートCA局のCA証明書を本検証で用いた方法でインストールする限り、このうざい警告については消す方法が無い(証明書をアンインストールする以外には)。
パブリックCA局のCA証明書でも同様の表示がされる、とのフォーラムの投稿が散見されるが、今回の検証ではSCRoot1ca, SCRoot2caについてはそのような挙動は発生しなかった。
ログイン - Google アカウント
Installing a private CA certificate for use with vpn or private web site encryption and or authentication results in the alert "network may be monitored" under the settings pull down. The following message is also displayed on boot "network may be monitored by an unknown third party". Although this doesn't appear to be limiting the phones functionality that I have seen so far the alert is bogus.
#3
Same problem when adding a CA for EAP-TLS authentication. This is a problem as it will incite users to remove the CA, thus lowering the corporate wifi security.
ログイン - Google アカウント
#16
For Wifi networks, even if you use a public CA, you still have to install the CA certificate, because Android doesn't reference those certificates for Wifi. So, even in that case, you would still get the annoying warning, which goes back to my point that I think the intent here is good, but the implementation is bad.
"even in that case, you would still get the annoying warning" が当方の検証と一致しないが。。。
異国のeduroamの中の人のコメント。
Android 4.3以上であれば、EnterpriseWifi APIを使用してCA証明書をWi-Fiストアにインストールすれば警告表示を回避できるとの書き込み。
実際に海外のeduroam加入機関の一部では https://cat.eduroam.org を運用しているようだ。
The situation is even a bit more absurd than the thread here suggests.
There is an API in Android 18+ (i.e. 4.3 and above), the EnterpriseWifi API. It has its own mechanisms to install CAs into the Wi-Fi store, and using that API will *not* trigger the warning and works completely UI-less.
Any manual installation of the CA by the user does though.
That's the extra hilarious thing: if the user consciously decides he wants to install something and clicks his way through very explicit UI, then that's bad and he will forever be warned. If an app sneaks the CA into his device without asking, it can do so without triggering any UI and Android will remain silent about it.
At least for our legitimate purposes, we the eduroam roaming consortium have developed such an app, the eduroam CAT app (Configuration Assistant Tool). You can install the app from Play Store, grab a config file matching your university from https://cat.eduroam.org and get a secure config, with CA and even server name matching. All this with no UI warnings about unknown certificates.
This doesn't invalidate this bug report though. If a user *decided* he *wants* a CA in his trust store, it is totally inadequate to warn them. Especially if the chosen trust store is the Wi-Fi store, which cannot be used to eavesdrop on the connection. The warning text is totally wrong in that case.
Anyway, not sure why I'm writing this. This bug report (and many others regarding Enterprise Wi-Fi features) continue to get ignored it seems. Way to go.
#46
I'm currently training my users to ignore certificate warnings so the can use our WPA-EAP secured network. This is plain wrong. Fix this.
ごもっともな気が。
クロアチアのeduroam installer。http://installer.eduroam.hr/
The eduroam installer enables simple and reliable configuration of end-user devices (computers, laptops, smart phones) for eduroam access.
Besides configuration for wireless access, installer can also be used for wired network access (if wired network access is compliant with eduroam standard, e.g. StuDOM network access).
To start configuring your device click on the button "Get configurations". If you have additional questions about installer service or problems with using this service please click on "Frequently asked question" button.
警告が出るのがプライベートCAだけなのか、パブリックCAでも同様に警告がでる場合があるのか、プライベートCAにパブリックオプションがついているとどうなるのか、パブリックCAだけど新しくて端末に最初から搭載されていない場合どうなるのか、いろいろとはっきりしない。
http://wiki.cacert.org/FAQ/ImportRootCert#Android_Phones_.26_Tablets
Starting from Android 4.0 (Android ICS/'Ice Cream Sandwich', Android 4.3 'Jelly Bean' & Android 4.4 'KitKat'), system trusted certificates are on the (read-only) system partition in the folder '/system/etc/security/' as individual files. However, users can now easily add their own 'user' certificates which will be stored in '/data/misc/keychain/certs-added'.
System-installed certificates can be managed on the Android device in the Settings -> Security -> Certificates -> 'System'-section, whereas the user trusted certificates are manged in the 'User'-section there. When using user trusted certificates, Android will force the user of the Android device to implement additional safety measures: the use of a PIN-code, a pattern-lock or a password to unlock the device are mandatory when user-supplied certificates are used.
Installing CAcert certificates as 'user trusted'-certificates is very easy. Installing new certificates as 'system trusted'-certificates requires more work (and requires root access), but it has the advantage of avoiding the Android lockscreen requirement.
いろいろと疑問は残っているのだが、一度ここらへんで公開してみる。
随時加筆します。