安全行为变更
Android P 引入了若干可提升应用和运行应用的设备安全性的行为变更。 本页面介绍对第三方应用开发者最重要的平台变更,需要他们牢记在心。
影响所有应用的行为变更
无论应用的目标平台版本如何,Android P 添加的若干功能均可令应用的安全性得到改善。
新增的 APK 密钥轮转
Android P 添加了对 APK Signature Scheme v3 的支持。该架构提供的选择可以在其签名块中为每个签名证书加入一条轮转证据记录。 应用可以通过将 APK 文件过去的签名证书链接到现在签署应用时使用的证书,使用新签名证书来签署应用。
除了可以使用新签名,您仍可使用旧签名证书来签署应用。 这样一来,用户就可以将应用安装在运行 Android 8.1(API 级别 27)的设备上,或者运行的 Android 版本较低,不支持更改签名证书的设备上。
传输层安全协议 (TLS) 实现变更
系统的传输层安全协议 (TLS) 实现在 Android P 中经历了若干次变更:
- 如果 SSLSocket 的实例在创建时连接失败,现在系统会引发 IOException 而非 NullPointerException。
- SSLEngine 类现在可正常处理出现的任何 close_notify 提醒。
更严格的 Seccomp 过滤器
我们对可供应用使用的系统调用做了进一步限制。 应用不受影响,但前提是应用使用 Bionic 内容库,并且不直接进行系统调用。
对 ChaCha20 流式传输加密的支持
Android 平台现在提供 RFC 7539 中所述的 ChaCha20 加密实现, {: .external-link}既有纯粹的流式传输加密形式 ChaCha20/None/NoPadding,也有 ChaCha20 + Poly1305 AEAD 形式 ChaCha20/Poly1305/NoPadding。
旧版加密支持
附带 Keymaster 4 的 Android P 设备支持三重数据加密算法(简称三重 DES)。 如果您的应用与需要三重 DES 的旧版系统进行互操作,请使用这种加密来加密敏感凭据。
影响以 Android P 为目标平台的应用的行为变更
Android P 添加的若干功能可改善应用的安全性,但仅当应用以 Android P 为目标平台时,才能获得这些改善。
默认情况下启用网络传输层安全协议 (TLS)
如果您的应用以 Android P 为目标平台,则默认情况下 isCleartextTrafficPermitted() 函数返回 false。 因此,如果您的应用需要为特定域名启用明文,您需要在应用的网络安全性配置中将 cleartextTrafficPermitted 显式地设置为 true。
按进程分设基于网络的数据目录
在 Android P 中,为改善应用稳定性和数据完整性,应用无法再让多个进程共用同一 WebView 数据目录。 此类数据目录一般存储 Cookie、HTTP 缓存以及其他与网络浏览有关的持久性和临时性存储。
在大多数情况下,您的应用只应在一个进程中使用 android.webkit 软件包中的类,例如 WebView 和 CookieManager。 例如,您应该将所有使用 WebView 的 Activity 对象移入同一进程。 您可以通过在应用的其他进程中调用 disableWebView(),更严格地执行“仅限一个进程”规则。 该调用可防止 WebView 在这些其他进程中被错误地初始化,即使是从依赖内容库进行的调用也能防止。
如果您的应用必须在多个进程中使用 WebView 的实例,则必须先利用 WebView.setDataDirectorySuffix() 函数为每个进程指定不同的数据目录后缀,然后再在该进程中使用 WebView 的给定实例。 该函数会将每个进程的网络数据放入其在应用数据目录内自己的目录中。
注:即使您使用 setDataDirectorySuffix(),系统也不会跨应用的进程界限共享 Cookie 以及其他网络数据。 如果应用中的多个进程需要访问同一网络数据,您需要自行在这些进程之间复制数据。 例如,您可以调用 getCookie() 和 setCookie(),在不同进程之间手动传送 Cookie 数据。
以应用为单位的 SELinux 域名
以 Android P 为目标平台的应用无法再利用可全球访问的 Unix 权限与其他应用共享数据。 此变更可改善 Android 应用沙盒的完整性, {: .external-link}具体地讲,就是要求应用的私有数据只能由该应用访问。
要与其他应用共享文件,请使用 content provider或外部存储空间内的共享空间。
网友评论