Android 11 如何不要驗證 Wi-Fi CA 憑證
文章目錄
- 系統刷機有一定的風險, 可能導致手機無法開機和失去保固, 資料還會被清空, 執行前請先三思!!!
- 此方法適用於 Android 11, 12. 還沒在 Android 13 上測試
本文更新紀錄
- 2022/05/30: 新增系統更新或 Wi-Fi 密碼修改後的處理方式
Wi-Fi CA 憑證驗證在 Android 11 的改變
Android 10 以前, 如果是連到 Enterprise Wi-Fi (EAP/PEAP), CA 憑證是可以選 "不要驗證", 如下:
自 Android 11 起, 如果是連到 Enterprise Wi-Fi (PEAP), CA 憑證就無法選 "不要驗證", 原因可參考 https://www.xda-developers.com/android-11-break-enterprise-wifi-connection/. 這個方向是對的, 但如果網管不改, 一般使用者恐怕也無能為力. (而且 iPhone 至少到 15.4 都沒有卡這個...)
爬了一下文, 看來是可以直接把這個設定加回去 (參考: https://android.stackexchange.com/questions/231859/), 但很不幸的, 檔案是放在 /data/misc/apexdata/com.android.wifi/WifiConfigStore.xm, 這裡的檔案必須 Unlock 才能修改. 文章裡面是寫有可能透過 App 修改, 但我沒找到方法, 如果有人找到好方法了, 也麻煩分享一下.
修改步驟
-
首先, 要 Unlock, Pixel 5 (Android 12) 可參考 https://dennys.github.io/tw/doc/android/google-pixel-5-root-magisk/. (要做到把 boot.img 換掉, Magisk 不需要裝)
-
試著連上 Wi-Fi, 網域就隨便給他寫, 然後試著連線, 這當然是不會成功, 目的只是要把帳號密碼寫進 Config 檔案.
-
先用下列指令檢查 WifiConfigStore.xml 是否正確, 這裡也可以用 adb pull 拉到電腦檢查, 但我一直沒成功, 就先用 cat 看.
1adb shell 2su 3cat /data/misc/apexdata/com.android.wifi/WifiConfigStore.xml
- 若執行 su 時發生 inaccessible or not found (如下圖), 通常是 root 沒成功, 請再確認一次 root 步驟.
1127|redfin:/system/bin $ su 2/system/bin/sh: su: inaccessible or not found
- 若執行 su 時發生 inaccessible or not found (如下圖), 通常是 root 沒成功, 請再確認一次 root 步驟.
-
讀出來的 WifiConfigStore.xml 內容如下, 可找 WifiEnterpriseConfiguration 這個關鍵字, 目的是要把 12,13 行的設定值清掉
1<WifiEnterpriseConfiguration> 2<string name="Identity">這裡是帳號名字</string> 3<string name="AnonIdentity"></string> 4<string name="Password">這裡是密碼</string> 5<string name="ClientCert"></string> 6<string name="CaCert"></string> 7<string name="SubjectMatch"></string> 8<string name="Engine">0</string> 9<string name="EngineId"></string> 10<string name="PrivateKeyId"></string> 11<string name="AltSubjectMatch"></string> 12<string name="DomSuffixMatch">這裡是上面隨便輸入的網域</string> 13<string name="CaPath">/system/etc/security/cacerts</string> 14<int name="EapMethod" value="0" /> 15<int name="Phase2Method" value="4" /> 16<string name="PLMN"></string> 17<string name="Realm"></string> 18<int name="Ocsp" value="0" /> 19<string name="WapiCertSuite"></string> 20<boolean name="AppInstalledRootCaCert" value="false" /> 21<boolean name="AppInstalledPrivateKey" value="false" /> 22<null name="KeyChainAlias" /> 23<null name="DecoratedIdentityPrefix" /> 24</WifiEnterpriseConfiguration>
-
執行以下指令 (這指令是直接從上面那篇 stackexchange 抄過來的), 他就會把
CaPath
和DomSuffixMatch
的內容改成空白. 最後一個步驟會重開, 要重開才會生效.1adb shell 2su 3sed -i 's%<string name="CaPath">.*</string>%<string name="CaPath"></string>%' /data/misc/apexdata/com.android.wifi/WifiConfigStore.xml 4sed -i 's%<string name="DomSuffixMatch">.*</string>%<string name="DomSuffixMatch"></string>%' /data/misc/apexdata/com.android.wifi/WifiConfigStore.xml 5reboot
-
重開完後, 檢查
/data/misc/apexdata/com.android.wifi/WifiConfigStore.xml
的內容, 確認下面 12~13 列的設定被清空了1<WifiEnterpriseConfiguration> 2<string name="Identity">這裡是帳號名字</string> 3<string name="AnonIdentity"></string> 4<string name="Password">這裡是密碼</string> 5<string name="ClientCert"></string> 6<string name="CaCert"></string> 7<string name="SubjectMatch"></string> 8<string name="Engine">0</string> 9<string name="EngineId"></string> 10<string name="PrivateKeyId"></string> 11<string name="AltSubjectMatch"></string> 12<string name="DomSuffixMatch"></string> 13<string name="CaPath"></string> 14<int name="EapMethod" value="0" /> 15<int name="Phase2Method" value="4" /> 16<string name="PLMN"></string> 17<string name="Realm"></string> 18<int name="Ocsp" value="0" /> 19<string name="WapiCertSuite"></string> 20<boolean name="AppInstalledRootCaCert" value="false" /> 21<boolean name="AppInstalledPrivateKey" value="false" /> 22<null name="KeyChainAlias" /> 23<null name="DecoratedIdentityPrefix" /> 24</WifiEnterpriseConfiguration>
-
這時候就可以測試連線了
-
因為實際上並不需要 root, 我們的目的是要修改 WifiConfigStore.xml, 因此改完後可以 UnRoot (移除 Magisk 和刷回原廠 boot.img), 但因為解鎖會清空資料, 而且下次又遇到新的 Wi-Fi 又得重來, 我就維持解鎖狀態了. 方法可參考 https://dennys.github.io/tw/doc/android/android-remove-root-magisk/
系統更新後如何處理?
不用處理, 至少目前我的 Pixel 5 更新到 2022 年 5 月更新 (12.1.0 (SP2A.220505.002, May 2022) 時, 都不需要處理.
Wi-Fi 密碼更新後如何處理?
- 如果系統有更新過, 就得先用 Magisk 重新 patch 一次.
- 一樣要試著連線一次 (當然也是不會成功), 重點是要把新密碼寫進 WifiConfigStore.xml.
- 然後再用 adb shell 跑一次上面的 sed 指令修改 WifiConfigStore.xml 即可.
後記
這個方法並不是把不要驗證 (Do Not Validate) 的設定加回去, 而是先嘗試連線一個要驗證的 Wi-Fi (當然這裡會失敗), 等他把設定檔存下來之後, 再進系統把憑證的設定改掉, 所以還是和 Android 10 以前不太一樣. 而且 每次連上一個新的要使用 EAP 的 Wi-Fi 基地台都要重新執行一次, 還是比較麻煩.
Posts in this Series
- 如何更新 Unlock 過的 Pixel 5
- Android 11 如何不要驗證 Wi-Fi CA 憑證
- Android 移除 Root 和 Magisk
- Samsung Galaxy S7 Edge 刷 LineageOS
- Google Pixel 5 Root & Magisk
- 如何還原 Android 12 的 Wi-Fi / 行動數據 快速開關 (免 Root)
- HTC U Ultra 刷機