2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
初回使用時の信頼(TOFU)
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Android 13 以降を搭載したデバイスの場合、Android では初回使用時の信頼(TOFU)認証方法(RFC7435)がサポートされています。ユーザーはサーバーで使用されるルート CA をインストールし、保存済みネットワークにドメイン名を設定することで、エンタープライズ(EAP)ネットワークを信頼できます。TOFU を使用すると、デバイスは、ユーザーが最初にエンタープライズ ネットワークに接続する際に未認証の公開鍵を取得し、以降の接続のためにその鍵を保持できます。
背景
パスワードだけが必要な個人用ネットワークとは異なり、エンタープライズ ネットワークでは、クライアントが証明書をプリインストールする必要がある公開鍵基盤(PKI)認証が使用されます。Android 11 以前では、ユーザーは、ネットワーク設定でサーバー CA 証明書の [検証しない] オプションを選択して、サーバー側の証明書の検証を回避できます。一方、セキュリティを強化し、WPA R2 の仕様に準拠するため、Android 12 ではエンタープライズ ネットワークでのサーバー証明書の検証が必須になりました。この追加要件により、該当するネットワークを使用するユーザーに、CA 証明書をインストールしなければならないという障壁が発生しました。TOFU を使用すると、ユーザーはルート CA を受け入れるだけで、PKI ベースのエンタープライズ ネットワークに接続できます。
機能の動作
TOFU をサポートするデバイスは、インストール済みで認証済み公開鍵を持たないエンタープライズ ネットワークにユーザーが接続したときに、次の動作を行います。
Wi-Fi 選択ツールを使って新しいネットワークに接続する
Wi-Fi 選択ツールで新しいエンタープライズ ネットワークを選択します。
デバイスに、ネットワークが信頼できるかどうかを確認するためのダイアログ(図 1)が表示されます。
[はい、接続します] をタップしてネットワーク接続を受け入れるか、[いいえ、接続しません] をタップして拒否します。
図 1. TOFU 機能のダイアログ
自動接続を有効にして既存のネットワークに接続する
自動接続が有効であるが、有効な CA 証明書がないエンタープライズ ネットワークに接続すると、デバイスが自動的に接続され、固定された(非表示にできない)通知が表示されます。
通知をタップします。
デバイスに、ネットワークが信頼できるかどうかを確認するためのダイアログ(図 1)が表示されます。
[はい、接続します] をタップしてネットワーク接続を受け入れるか、[いいえ、接続しません] をタップして拒否します。
実装
TOFU 機能をサポートするには、/hardware/interfaces/wifi/supplicant/aidl/android/hardware/wifi/supplicant
の Android オープンソース プロジェクト(AOSP)で提供されるサプリカント HAL を実装します。
Android 13 では、次の公開 API をアプリで使用できます。
検証
デバイスでの TOFU の実装を検証するには、次のテストを使用します。
- CTS:
CtsWifiTestCases
- VTS:
VtsHalWifiSupplicantStaNetworkTargetTest
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-25 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-25 UTC。"],[],[],null,["# Trust on First Use (TOFU)\n\nFor devices running Android 13 or higher, Android\nsupports the Trust on First Use (TOFU) authentication approach\n([RFC7435](https://datatracker.ietf.org/doc/html/rfc7435.html)),\nwhich lets users trust an enterprise (EAP) network by installing the root CA\nused by the server and setting its domain name in a saved network. TOFU allows\nthe device to obtain an unauthenticated public key when a user first connects\nto an enterprise network and retain the key for subsequent connections.\n\nBackground\n----------\n\nCompared to personal networks that just require a password, enterprise networks\nuse public key infrastructure (PKI) authentication, which requires the client\nto preinstall certificates. In Android 11 or lower, users can select the\n*Do not validate* option for the server CA certificate in the network settings,\nbypassing the validation of the server side certificate. However, to strengthen\nsecurity and comply with the WPA R2 specification, Android 12 introduced a\nrequirement for enterprise networks to have server certificate validation. This\nadditional requirement created a barrier for users as they need to install a CA\ncertificate for such networks. TOFU provides a way for users to connect to a\nPKI-based enterprise network by simply accepting its root CA.\n\nFeature behavior\n----------------\n\nDevices that support TOFU display the following behavior when a user connects\nto an enterprise network that doesn't have an *already-installed*\nauthenticated public key.\n\n### Connect to new network through Wi-Fi picker\n\n1. Select a new enterprise network in Wi-Fi picker.\n\n The device displays a dialog (Figure 1) to confirm whether the\n network is trusted.\n2. Tap **Yes, connect** to accept the network connection, or tap **No, don't\n connect** to decline.\n\n - If you tap **Yes, connect**, the device automatically configures the\n security parameters, connects to the network, and enables autoconnect\n for the network.\n\n | **Note:** Misconfigured networks that use invalid or expired certificates might not allow any security validation by the device. In such cases, the device fails to connect to the network.\n - If you tap **No, don't connect**, the device disconnects from the\n network and disables autoconnect for the network.\n\n **Figure 1.** Dialog for the TOFU feature\n\n### Connect to existing network with autoconnect enabled\n\nWhen connecting to an enterprise network that has autoconnect enabled but\ndoesn't have a valid CA certificate, the device connects automatically, then\ndisplays a sticky (nondismissable) notification.\n\n1. Tap the notification.\n\n The device displays a dialog (Figure 1) to confirm whether the\n network is trusted.\n2. Tap **Yes, connect** to accept the network connection, or tap **No, don't\n connect** to decline.\n\n - If you tap **Yes, connect**, the device automatically configures the\n security parameters, connects to the network, and enables autoconnect\n for the network.\n\n | **Note:** Misconfigured networks that use invalid or expired certificates might not allow any security validation by the device. In such cases, the device fails to connect to the network.\n - If you tap **No, don't connect**, the device disconnects from the\n network and disables autoconnect for the network.\n\nImplementation\n--------------\n\nTo support the TOFU feature, implement the supplicant HALs provided in the\nAndroid Open Source Project (AOSP) at\n[`/hardware/interfaces/wifi/supplicant/aidl/android/hardware/wifi/supplicant`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/interfaces/wifi/supplicant/aidl/android/hardware/wifi/supplicant).\n\nThe following public APIs are available in Android 13\nfor use by apps:\n\n- [`WifiManager#isTrustOnFirstUseSupported()`](https://developer.android.com/reference/android/net/wifi/WifiManager#isTrustOnFirstUseSupported()): Indicates whether the device supports TOFU.\n- [`WifiEnterpriseConfig#enableTrustOnFirstUse(boolean)`](https://developer.android.com/reference/android/net/wifi/WifiEnterpriseConfig#enableTrustOnFirstUse(boolean)): Enables TOFU.\n- [`WifiEnterpriseConfig#isTrustOnFirstUseEnabled()`](https://developer.android.com/reference/android/net/wifi/WifiEnterpriseConfig#isTrustOnFirstUseEnabled()): Indicates whether TOFU is enabled.\n\nValidation\n----------\n\nTo validate the implementation of TOFU on your device, use the following tests:\n\n- CTS: `CtsWifiTestCases`\n- VTS: `VtsHalWifiSupplicantStaNetworkTargetTest`"]]