Android P 默认通过TLS保护用户

原文来自:Protecting users with TLS by default in Android P

Android承诺去保持用户他们的设备和数据安全。保持数据安全之一的方式是,通过保护Android设备在进入或者离开中转传输层安全(TLS)的所有数据。正如我们在Android P开发者预览版中宣布的那样,我们将进一步改善这些保护,通过阻止目标版本是Android P的应用程序来自默认允许未加密的连接。

这是我们为保护Android用户,多年来做出的各种改变。去阻止偶发的未加密连接,在Android Marshmallow(6.0)中我们介绍了android:usesCleartextTraffic清单属性。在Android Nougat(7.0),我们通过创建Network Security Config(网络安全配置)功能特性去扩展了这个属性,允许应用程序去表明它们不打算在没有加密的情况下发送网络流量。在Android Nougat(7.0)和Android Oreo(8.0),我们仍然允许明文连接。

我怎么更新我的应用程序?

如果你的应用程序对于所有的连接都使用了TLS,然后你不需要做什么了。如果你还没有,就去使用TLS去加密所有的连接更新你的应用程序。如果你仍然需要去使用明文进行连接,继续去阅读一下最佳做法。

为什么我应该使用TLS?

Android考虑到所有的网络可能有敌意,因此加密流量应该在所有时间对于所有的连接都被使用。移动设备尤其面临风险,因为它们经常会连接到许多不同的网络,比如在咖啡店的Wi-Fi

所有的流量应该被加密,无论内容是什么。作为任意一种未加密的连接能够注入内容被使用,对于那些可能弱势的客户端代码增加攻击面,或者攻击用户。更多信息,看我们过去的博客文章开发者高峰论坛

TLS是不是很慢?

不,它不是

我如何在我的应用程序中使用TLS ?

只要你的服务器支持TLS, 只需要在你的应用程序和服务器响应中把URLs 从http://改变成https:// 。你的HTTP栈处理TLS握手,无需其他更多操作。

如果你是自己制作的Socket,使用SSLSocketFactory去替代SocketFactory
要格外小心去正确使用作为SSLSocket的socket,它不会去验证主机。你的应用程序需要做的是它自己的主机验证。优选通过调用getDefaultHostnameVerifier())期望的主机名。进一步,谨防HostnameVerifier.verify())在发生异常时不会抛出错误,但是相反的會返回一个boolean的结果,你必须明确的检查。

我需要去使用一个明文去…

当你应该对所有连接使用TLS,可能你需要去使用一个明文流量针对于遗留原因。比如连接到一些服务器。因此,改变你的应用程序的网络安全配置,以允许这些连接。

我们包括了一组示例配置,更多帮助查看network security config文档。

允许明文连接到一个具体的域,你可以使用如下的配置作为一个向导:

1
2
3
4
5
6
<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>

允许连接到任意不安全的域

如果你的应用程序支持打开任意来自不安全URLs的内容,当支持明文连接到任意主机,你应该禁用明文连接到你自己的服务器。记住,对于这些通过
不安全连接接收到的数据你应该谨慎,它能够在传输的过程当中被篡改。

1
2
3
4
5
6
7
<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)来尊重应用程序明文设置。

以上是对Android官网博客文章的翻译,如果不足,欢迎指正,谢谢

Shoewann wechat
欢迎订阅公众号——“谷愛”
如果觉得本文对您有用,请随意 ¥打赏支持 !