安全行為變更
Android P 引入了若干可提升應(yīng)用和運行應(yīng)用的設(shè)備安全性的行為變更藕甩。 本頁面介紹對第三方應(yīng)用開發(fā)者最重要的平臺變更命爬,需要他們牢記在心曹傀。
影響所有應(yīng)用的行為變更
無論應(yīng)用的目標(biāo)平臺版本如何,Android P 添加的若干功能均可令應(yīng)用的安全性得到改善饲宛。
新增的 APK 密鑰輪轉(zhuǎn)
Android P 添加了對 APK Signature Scheme v3 的支持皆愉。該架構(gòu)提供的選擇可以在其簽名塊中為每個簽名證書加入一條輪轉(zhuǎn)證據(jù)記錄。 應(yīng)用可以通過將 APK 文件過去的簽名證書鏈接到現(xiàn)在簽署應(yīng)用時使用的證書艇抠,使用新簽名證書來簽署應(yīng)用幕庐。
除了可以使用新簽名,您仍可使用舊簽名證書來簽署應(yīng)用家淤。 這樣一來异剥,用戶就可以將應(yīng)用安裝在運行 Android 8.1(API 級別 27)的設(shè)備上,或者運行的 Android 版本較低絮重,不支持更改簽名證書的設(shè)備上冤寿。
傳輸層安全協(xié)議 (TLS) 實現(xiàn)變更
系統(tǒng)的傳輸層安全協(xié)議 (TLS) 實現(xiàn)在 Android P 中經(jīng)歷了若干次變更:
- 如果 SSLSocket 的實例在創(chuàng)建時連接失敗,現(xiàn)在系統(tǒng)會引發(fā) IOException 而非 NullPointerException青伤。
- SSLEngine 類現(xiàn)在可正常處理出現(xiàn)的任何 close_notify 提醒督怜。
更嚴(yán)格的 Seccomp 過濾器
我們對可供應(yīng)用使用的系統(tǒng)調(diào)用做了進一步限制。 應(yīng)用不受影響狠角,但前提是應(yīng)用使用 Bionic 內(nèi)容庫号杠,并且不直接進行系統(tǒng)調(diào)用。
對 ChaCha20 流式傳輸加密的支持
Android 平臺現(xiàn)在提供 RFC 7539 中所述的 ChaCha20 加密實現(xiàn)丰歌, {: .external-link}既有純粹的流式傳輸加密形式 ChaCha20/None/NoPadding姨蟋,也有 ChaCha20 + Poly1305 AEAD 形式 ChaCha20/Poly1305/NoPadding。
舊版加密支持
附帶 Keymaster 4 的 Android P 設(shè)備支持三重數(shù)據(jù)加密算法(簡稱三重 DES)立帖。 如果您的應(yīng)用與需要三重 DES 的舊版系統(tǒng)進行互操作芬探,請使用這種加密來加密敏感憑據(jù)。
影響以 Android P 為目標(biāo)平臺的應(yīng)用的行為變更
Android P 添加的若干功能可改善應(yīng)用的安全性厘惦,但僅當(dāng)應(yīng)用以 Android P 為目標(biāo)平臺時偷仿,才能獲得這些改善。
默認(rèn)情況下啟用網(wǎng)絡(luò)傳輸層安全協(xié)議 (TLS)
如果您的應(yīng)用以 Android P 為目標(biāo)平臺宵蕉,則默認(rèn)情況下 isCleartextTrafficPermitted() 函數(shù)返回 false酝静。 因此,如果您的應(yīng)用需要為特定域名啟用明文羡玛,您需要在應(yīng)用的網(wǎng)絡(luò)安全性配置中將 cleartextTrafficPermitted 顯式地設(shè)置為 true别智。
按進程分設(shè)基于網(wǎng)絡(luò)的數(shù)據(jù)目錄
在 Android P 中,為改善應(yīng)用穩(wěn)定性和數(shù)據(jù)完整性稼稿,應(yīng)用無法再讓多個進程共用同一 WebView 數(shù)據(jù)目錄薄榛。 此類數(shù)據(jù)目錄一般存儲 Cookie讳窟、HTTP 緩存以及其他與網(wǎng)絡(luò)瀏覽有關(guān)的持久性和臨時性存儲。
在大多數(shù)情況下敞恋,您的應(yīng)用只應(yīng)在一個進程中使用 android.webkit 軟件包中的類丽啡,例如 WebView 和 CookieManager。 例如硬猫,您應(yīng)該將所有使用 WebView 的 Activity 對象移入同一進程补箍。 您可以通過在應(yīng)用的其他進程中調(diào)用 disableWebView(),更嚴(yán)格地執(zhí)行“僅限一個進程”規(guī)則啸蜜。 該調(diào)用可防止 WebView 在這些其他進程中被錯誤地初始化坑雅,即使是從依賴內(nèi)容庫進行的調(diào)用也能防止。
如果您的應(yīng)用必須在多個進程中使用 WebView 的實例衬横,則必須先利用 WebView.setDataDirectorySuffix() 函數(shù)為每個進程指定不同的數(shù)據(jù)目錄后綴裹粤,然后再在該進程中使用 WebView 的給定實例。 該函數(shù)會將每個進程的網(wǎng)絡(luò)數(shù)據(jù)放入其在應(yīng)用數(shù)據(jù)目錄內(nèi)自己的目錄中蜂林。
注:即使您使用 setDataDirectorySuffix()遥诉,系統(tǒng)也不會跨應(yīng)用的進程界限共享 Cookie 以及其他網(wǎng)絡(luò)數(shù)據(jù)。 如果應(yīng)用中的多個進程需要訪問同一網(wǎng)絡(luò)數(shù)據(jù)悉尾,您需要自行在這些進程之間復(fù)制數(shù)據(jù)突那。 例如,您可以調(diào)用 getCookie() 和 setCookie()构眯,在不同進程之間手動傳送 Cookie 數(shù)據(jù)愕难。
以應(yīng)用為單位的 SELinux 域名
以 Android P 為目標(biāo)平臺的應(yīng)用無法再利用可全球訪問的 Unix 權(quán)限與其他應(yīng)用共享數(shù)據(jù)。 此變更可改善 Android 應(yīng)用沙盒的完整性惫霸, {: .external-link}具體地講猫缭,就是要求應(yīng)用的私有數(shù)據(jù)只能由該應(yīng)用訪問。
要與其他應(yīng)用共享文件壹店,請使用 content provider或外部存儲空間內(nèi)的共享空間猜丹。