概述

移动应用很多时候并非孤立存在,在多数场景下存在前、后台以及第三方服务之间进行数据交互,因此,在网络中传输敏感数据在所难免,如果不使用正确安全的传输方式,有可能存在敏感信息泄漏的风险。

安全准则

A.      使用SSL协议(或基于SSL的协议)传输敏感数据。

B.      验证服务器证书的有效性,防止中间人攻击,当证书有效性验证失败时应强行断开连接,而不是提示用户。

C.      尽可能地减少使用短信发送敏感信息。

D.      增强项:应用程序可以对敏感数据进行一次独立加密后再通过SSL进行传输。

详细描述

A.      可以使用“证书锁定”(certificate pinning)的方式验证证书的有效性,即在代码中精确的验证当前服务器是否持有某张指定的证书。X509TrustManager接口是实现证书锁定一种方法,它通过在SSL回调函数中读取服务器证书密钥并和程序预埋的证书密钥进行对比,如果两者不一致则强行断开链接(参考附录2)。

备注

A.      任何申请了READ_SMS permission的应用都可以读取短信内容,故应尽量减少使用短信发送敏感信息。

B.      应用自身进行一次独立加密的好处是,当出现SSL协议相关漏洞(比如影响巨大的openssl heart bleed漏洞)时能够有效减少损失。

C.      “证书锁定”的缺点是:由于证书是预埋在应用程序内的,是当服务器更新证书时,应用程序也要同步更新。

注:如果IE显示格式不正确,请使用chrome浏览器

附录2:

使用“证书锁定”验证证书有效性方案:

/* 使用https需要定义实现X509TrustManager接口的类,并重写里面的方法,这些方法会在建立SSL链接的过程中被自动调用 */

public final class PubKeyManager implements X509TrustManager

{

         /* 此处存放服务器证书密钥 */

  private static String PUB_KEY =

                       "30820122300d06092a864886f70d01010105000382010f"

                            + "003082010a0282010100973a0569971991dc9446f309ec0af7646377dca80eb1"

                            + "e1357f5fb5c69d046d03d23f6cf743d155e7b44d834cf71d6500a8b1e38110b5"

                            + "35ad07212a50e1f3ab497acfde74e065018d64136d14d63d04604124aacd74ea"

                            + "037a5f8d6894aadd58f7774655761c9fba22426935794f6740fa89b6f7e902b8"

                            + "e02c0b842116272701c9edaef62c977b0df488847c2e0a75028865be34c98903"

                            + "be11a2cf4495acec5c958ddf64619808e641bac64ab432e4638e969f4214d7bc"

                            + "88db81feaef4d5d329f93f2e79535b2d00c01145823b664ca7ab8db9de858d29"

                            + "161c6cce86decb6a4f66cf86afb79e182a5b5a2bb6d8795af749f7af356aef2e"

                            + "64b6ae785ff88d456f970203010001";

 

         /*  https协商中获取的服务器证书链(chain)将自动传入该方法 */

  public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException

  {

    if (chain == null) {

      throw new IllegalArgumentException("checkServerTrusted: X509Certificate array is null");

    }

 

    if (!(chain.length > 0)) {

      throw new IllegalArgumentException("checkServerTrusted: X509Certificate is empty");

}

 

         /* authType为建立SSL链接时使用的非对称加密算法,RSA为业界主流算法 */

    if (!(null != authType && authType.equalsIgnoreCase("RSA"))) {

      throw new CertificateException("checkServerTrusted: AuthType is not RSA");

    }

 

    /* 执行SSL/TLS常规性检查 */

    try {

      TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");

      tmf.init((KeyStore) null);

     

      for (TrustManager trustManager : tmf.getTrustManagers()) {

        ((X509TrustManager) trustManager).checkServerTrusted(chain, authType);

      }

    } catch (Exception e) {

      throw new CertificateException(e);

}

 

/* 将编码后的密钥转换成16进制形式的大整数 */

    RSAPublicKey pubkey = (RSAPublicKey) chain[0].getPublicKey();

    String encoded = new BigInteger(1, pubkey.getEncoded()).toString(16);

 

    /* 比较预埋证书密钥和服务器证书密钥是否一致 */

    final boolean expected = PUB_KEY.equalsIgnoreCase(encoded);

    if (!expected) {

      throw new CertificateException("checkServerTrusted: Expected public key: "

                + PUB_KEY + ", got public key:" + encoded);

      }

    }

  }

}

移动应用安全开发指南(Android)--数据传输的更多相关文章

  1. 移动应用安全开发指南(Android)--Android组件和IPC

    概述 移动应用开发中,往往有跨进程通信的需求,方便地实现程序间的数据共享.Android提供了多种IPC通信的方式,给开发人员带来了便利,但如果选择或使用不当,就有可能发生各种各样的风险. 安全准则 ...

  2. 移动应用安全开发指南(Android)--数据验证

    概述 移动应用往往通过数据的发送.接收和处理来完成一系列功能,通常情况下,处理的数据绝大部分都来源于外部(比如网络.内部或外部存储和用户输入等),对这些数据处理不当会导致各种各样的漏洞和风险,比代码执 ...

  3. 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)

    1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成, ...

  4. 腾讯云安全:开发者必看|Android 8.0 新特性及开发指南

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 A ...

  5. Android开发指南--0 总览

    无意间发现一个网站,主打IOS方面的教程,然而作为一个Android开发者,我就找了下网站里有没有Android的教程,还真有,这里就翻译一下. 翻译目标教程:https://www.raywende ...

  6. Android进程和线程(Android开发指南--译)

    (转自:http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html) Processes and Threads 译者署名: 呆呆大虾 ...

  7. 开发者必看|Android 8.0 新特性及开发指南

    背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Andro ...

  8. 移动应用安全开发指南(Android)--完结篇

    如果IE显示格式不正常,请使用chrome浏览器 1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP ...

  9. Android SDK 开发指南

    Android SDK 开发指南 视频详解 以下视频是对融云 Android SDK 开发使用的详细讲解,您可以在阅读文档时配合学习.   更多视频教程如下: CSDN 融云 Android SDK ...

  10. Xamarin体验:使用C#开发iOS/Android应用

    Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发.   简介 Xamarin是基于Mo ...

随机推荐

  1. 51/52单片机 TCON控制字及TMOD寄存器

    转载:http://blog.csdn.net/u010698858/article/details/44118157 TCON:定时器控制寄存器 寄存器地址88H,位寻址8FH-88H. 位地址 8 ...

  2. ThinkPHP5 模型 - 事务支持

    使用事务之前,先确保数据库的存储引擎支持事务操作. MyISAM:不支持事务,主要用于读数据提高性能 InnoDB:支持事务.行级锁和并发 Berkeley DB:支持事务 ThinkPHP5 使用事 ...

  3. 内存分配器memblock【转】

    转自:http://blog.csdn.net/kickxxx/article/details/54710243 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 背景 Data ...

  4. linux===Ubuntu 上安装 Node.js

    https://www.cnblogs.com/andfly/p/6681487.html

  5. 在linux内核中获得比jiffies精度更高的时间值【转】

    转自:http://blog.chinaunix.net/uid-20672257-id-2831219.html 内核一般通过jiffies值来获取当前时间.尽管该数值表示的是自上次系统启动到当前的 ...

  6. 2015多校第6场 HDU 5353 Average 贪心,细节处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5353 题意:有n个人围城一个环,每一个人手里都有一些糖果,第i个人有ai块.现在有三种操作:第i个人给 ...

  7. Android内存溢出解决方案总结

    我的视频会议中有三个内存泄露的崆点: 1) BNLiveControlView mView = this; 未释放 (自定义view中自己引用自己造成) 2) 在自定义View中区注册了系统的网络变化 ...

  8. C++中string类的方法

    C++ string类的方法 具体每个方法怎么使用,可以参考相应的链接. 总的链接为http://www.cplusplus.com/reference/string/string/(C++参考文档) ...

  9. Linux 日志系统及分析

    简介 在Centos 7.x / RHEL 7.x 的版本,系统日志是由一个名为 rsyslog的服务管理的,默认的日志守护进程为 rsyslog , rsyslog 是 syslog 的升级版本,默 ...

  10. JAVA 语言类的特性(成员、重载、构造方法、静态成员)

    一.类的私有成员和公有成员 1.私有成员 修饰符private    如果在类的声明前加上修饰符private,则无法从该类的外部访问到该类的内部成员,而只能被该类自身访问和修改,而不嗯那个被其他类, ...