前言
有开发的好友和我提起,谷歌在Android P 中默认使用TLS保护用户,会造成部分Android8.0系统手机无法正常访问网络,于是我找到有关于这个的资讯。我在谷歌Android官方找到有关于这个文章:
译文
在Android P中默认使用TLS保护用户
2018年10月 Android高级软件安全工程师,Chad Brubaker发布
Android致力于保持用户、设备和数据的安全。我们保护数据安全的方法之一是通过保护进入或离开传输层安全(TLS)传输中的Android设备的所有数据。正如我们在Android P开发者预览中宣布的,我们正在通过防止针对Android P的应用程序默认允许未加密连接来进一步改进这些保护。
为了更好地保护Android用户,我们在这些年里做了很多改变。为了防止意外的未加密连接,我们在Android Marshmallow中引入了android:usesCleartextTraffic manifest属性。在Android Nougat中,我们通过创建网络安全配置特性来扩展该属性,该特性允许应用程序指示它们不打算在没有加密的情况下发送网络流量。在Android 7.0和8.0中,我们仍然允许使用明文连接。
如何更新我的应用程序?
如果你的应用程序使用TLS来连接所有的连接,那么你就无事可做了。如果没有,更新您的应用程序使用TLS加密所有连接。如果您仍然需要创建明文连接,请继续阅读一些最佳实践。
我为什么要使用TLS?
Android认为所有的网络都可能是敌对的,所以所有的连接都应该使用加密的流量。移动设备尤其处于危险之中,因为它们经常连接到许多不同的网络,比如咖啡店的Wi-Fi。
所有流量都应该被加密,不管内容如何,因为任何未加密的连接都可用于注入内容、增加潜在易受攻击的客户端代码的攻击面或跟踪用户。欲了解更多信息,请参阅我们过去的博客文章和开发者峰会。
TLS不慢吗?
不,不是的。
如何在我的应用程序中使用TLS?
一旦您的服务器支持TLS,只需更改应用程序中的URL和http://到https://的服务器响应。您的HTTP堆栈处理TLS握手而无需再做任何工作。
如果你自己创建一个sockets,就用一个SSLSocketFactory 代替SocketFactory。请小心使用Socket,因为SSLocket不执行主机名验证。您的应用程序需要执行自己的主机名验证,最好是使用预期的主机名调用getDefaultHostnameVerifier()方法。此外,请注意,HostnameVerifier.verify()方法不会对错误抛出异常,而是返回必须显式检查的boolean结果。
我需要使用明文流量
虽然应该对所有连接使用TLS,但是可能由于遗留原因(例如连接到一些服务器)需要使用明文流量。要做到这一点,改变应用程序的网络安全配置允许这些连接。
我们已经包括了几个示例配置。请参阅“网络安全配置文件”以获得更多帮助。
允许到特定域的明文连接
如果需要允许连接到特定域或域集合,可以使用以下配置作为指南:
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">insecure.example.com</domain>
<domain includeSubdomains="true">insecure.cdn.example.com</domain>
</domain-config>
</network-security-config>
允许连接到任意不安全域
如果您的应用程序支持通过不安全连接从URL打开任意内容,则应该禁用到您自己的服务的明文连接,同时支持到任意主机的明文连接。请记住,对于通过不安全连接接收的数据,您应该谨慎,因为它可能在传输过程中被篡改。
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">example.com</domain>
<domain includeSubdomains="true">cdn.example2.com</domain>
</domain-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
如何更新我的库?
如果您的库直接创建安全/不安全的连接,请确保它在打开任何明文连接之前通过检查isCleartextTrafficPermitted来遵守应用程序的明文设置。
在AndroidP中,谷歌默认启用了TLS加密,以保护用户数据安全,这可能导致部分未更新应用的Android8.0手机无法正常访问网络。本文详细介绍了为何及如何在应用中使用TLS,以及如何更新应用和库以符合这一变化。

被折叠的 条评论
为什么被折叠?



