博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 Android P 中使用默认 TLS 来保护您的用户
阅读量:7179 次
发布时间:2019-06-29

本文共 1821 字,大约阅读时间需要 6 分钟。

作者:Chad Brubaker -?Android 安全部门高级软件工程师?

 

Android 一直致力于保护其用户、用户的设备以及用户数据的安全。其中一种保持数据安全的方式是让所有进入或离开 Android 设备的数据通过安全传输层 (TLS) 来通信。如同在 Android P 预览版中宣布的一样,我们正在通过阻止目标为 Android P 的应用在默认情况下允许未加密的连接这一行为来进一步改进这些保护措施。

 

伴随着多年来为了更好地保护 Android 用户所做出的改变。为了防止意外的非加密连接,我们在 Android Marshmallow 中引入了新的 manifest 属性?android:usesCleartextTraffic。在 Android Nougat 中,通过创建?Network Security Config?来扩展了这个属性,用来表明 app 并没有使用加密网络链接的倾向。在 Android Nougat 和 Oreo 中, 我们仍然允许明文传播。

 

 

如何更新您的 app?

如果您 app 的所有网络请求已经使用上了 TLS,那么您什么都不用做。但如果不是,则需要使用 TLS 来加密所有的网络请求。如果您仍然需要发起明文传输的请求,请继续阅读下文。

 

为什么需要使用 TLS?

Android 系统认为所有网络都可能是具有敌意的,因此应始终使用加密流量。移动设备则是更加容易受到攻击,因为它们经常性地链接到许多不同的网络,比如咖啡店的 Wi-Fi。

 

所有的网络传输都应该被加密,无论它们传输的何种内容,因为任何未加密的连接都可能被攻击并被注入额外内容,让潜在拥有脆弱防护性能的客户端代码更能够被多点击破,或是用来跟踪用户。

 

TLS 会很慢吗?

当然不是!

 

如何在 app 中使用 TLS?

一旦您的服务器端支持了 TLS,只要简单地将 app 和服务器响应的 URL 从 http:// 改变成 https://。您的 HTTP 堆栈将会自动地处理好相关事宜。

 

如果您需要自己处理套接字,请使用 [SSLSocketFactory] 而不是 [SocketFactory]。请一定要特别注意正确地使用套接字,因为 [SSLSocket] 没有提供主机名的验证。您的 app 需要自己来处理主机名验证,最好通过调用?[getDefaultHostnameVerifier()] 来处理主机名。而是,当调用?HostnameVerifier.verify()?时一定要谨慎,它没有抛出任何异常或者错误,相反它返回了一个需要明确检查值的布尔值结果。

 

我还是需要使用明文传输

当然您应该在所有链接中使用 TLS,但有可能由于历史原因您还是需要使用明文传输,比如连接上一台无人维护的老旧服务器。要这样做,就需要配置 app 的网络安全设置来允许这些连接。

 

我们已经有了一些这样的范例配置。请查看?network security config?来获得更多的帮助。

 

>>?network security config

https://developer.android.google.cn/training/articles/security-config

 

允许特殊的域名使用明文传输

如果您需要允许连接到特定域名或一组域名,可以使用以下配置作为指导:

640?wx_fmt=jpeg

 

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

如果您的应用支持通过不安全连接从 URL 打开任意内容,您只需设置与自己的服务器通信时才使用加密传输。时刻记住,小心处理从非安全连接得到的数据,它们可能已经在传输过程中被篡改。

640?wx_fmt=jpeg

 

 

如何更新库?

如果您使用的库直接地创建了安全或者非安全的连接,确保它们在发起任意明文传输请求前调用过?isCleartextTrafficPermitted 来检查其行为可行性。

 

 

?点击屏末?|?阅读原文?|?您可查看?Android?和?Google Play?相关内容信息

 

640?wx_fmt=png

 

 

推荐阅读:

·?如何优化您的 Android 应用 (Go 版)

·?应用迁移至 Android P 操作指南

·?Android P Beta 2 及终版 API 强势来袭!

·?非 SDK 接口常见问题 | Android 开发者 FAQ Vol.13

640?wx_fmt=gif


文章来源:

转载于:https://www.cnblogs.com/yujingyua/p/9645155.html

你可能感兴趣的文章
我的友情链接
查看>>
windows XP 获取网卡MAC和IP地址
查看>>
python对象类型与运算
查看>>
SNMP 诊断方法
查看>>
ELK日志分析集群部署笔记
查看>>
随机挑几个--脚本
查看>>
python操作数据库之读取数据库数据方法
查看>>
HTTPS工作原理
查看>>
DHCP服务器与NIS服务器
查看>>
Android官方开发文档Training系列课程中文版:分享简单数据之发送简单数据给其它APP...
查看>>
spring boot 框架 启动更新项目,以及生成 "实体_"文件
查看>>
Asp编程中的一些重要函数(2)
查看>>
免运费:卓越亚马逊的最后一搏?
查看>>
Android官方开发文档Training系列课程中文版:手势处理之ViewGroup的事件管理
查看>>
linux-Kickstart
查看>>
1月2日课程笔记 lvm介绍与实际操作
查看>>
windows Server 2012安装DNS步骤
查看>>
图像压缩的王者:Image Optimizer V5.1 汉化修正绿色版
查看>>
Nginx + CGI/FastCGI + C/Cpp
查看>>
mysql创建用户
查看>>