【Android测试技巧】02. 测试手机客户端HTTPS 你应该知道的事


了解https

HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的保护
HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(意即“我信任证书颁发机构告诉我应该信任的”)。因此,一个到某网站的HTTPS连接可被信任,需要满足下面的条件:

  1. 用户相信他们的浏览器正确实现了HTTPS且安装了正确的证书颁发机构;
  2. 用户相信证书颁发机构仅信任合法的网站;
  3. 被访问的网站提供了一个有效的证书,意即,它是由一个被信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告);
  4. 该证书正确地验证了被访问的网站(如,访问https://example时收到了给“Example Inc.”而不是其它组织的证书);
  5. 或者互联网上相关的节点是值得信任的,或者用户相信本协议的加密层(TLS或SSL)不能被窃听者破坏。

https的工作过程

(数据加密和身份验证)
1、安全的通道分为两个部分,一个是数据的加密,一个是身份的验证。
2、https使用的是应用层的SSL来加密http的数据的,具体是如何加密的呢?我以登陆银行网页进行在线信用卡查询为例来介绍ssl在加密http上的全部过程。
3、首先是进行身份的验证,因为如果身份都不正确数据还有意义吗?验证身份的方法有很多,最主流的是CA来颁发证书了。CA就是一个双方都信任的第三方机构,等于是由它来担保我就是我,银行就是银行!但是银行对于个人来说使用CA的时候不多,因为CA设置比较麻烦,银行常使用的是另外的一种方法,比如说农业银行的密码卡,交通银行的手机绑定,都是为了确定用户的身份,防止别人冒用你的身份来登陆你的账户。
4、当用户打开IE浏览器输入https://访问银行的网页的时候,首先是用户的IE会把域名解析成为IP地址,以443端口来请求远端服务器的相应,服务器有监听进程在等待用户的访问,它收到请求后会建立连接,用户会发送它可以使用的加密手段和加密算法(这个也是浏览器能够识别的东西,不通的浏览器会发送不同的内容),服务器会从客户端发送的加密方式中挑选它认为合适的加密方式会送给客户端,这样客户端就能知道服务器要用什么算法加密数据了。现在只是一个协商,数据还都是明文的。
5、下一步服务器会发送一个证书,证书就是CA颁发的证明自己身份的身份证,在证书中有服务器的公钥,如果客户端不信任CA就会弹出一个报警信息,提示有一个非信任的CA发送的证书,问你该怎么处理。当用户点击了接收后,证书就会保存在浏览器中。同时服务器会要求客户端也验证自己的身份,比如说输入手机传过来的验证码,或者把密码卡的哪几个数字输入网页中。如果你输入正确了,服务器就验证好了你的身份了。
6、接下来客户端会产生一个随机的密码,这个密码是用来加密数据的,但是这个密码如果让黑客知道了是很不安全的,所以这个密码用服务器端的证书的公钥进行了加密,加密后的密文传输给服务器,因为只有服务器有自己的私钥,所以之后服务器能够解密这个经过公钥加密的密码数据,服务器当然会用私钥解密,这样双方就知道了要用什么密钥来加密了,然后接下来的具体数据就是使用这个密钥和前面第一阶段协商的加密算法来加密数据了。

HTTP工作原理请参考:http://www.guokr.com/post/114121/

浏览器实现

当连接到一个提供无效证书的网站时,较旧的浏览器会使用一对话框询问用户是否继续,而较新的浏览器会在整个窗口中显示警告;较新的浏览器也会在地址栏中凸显网站的安全信息(如,扩展验证证书在Firefox里会使地址栏出现绿锁标志)。

【Android测试技巧】02. 测试手机客户端HTTPS 你应该知道的事_第1张图片

 
Internet Explorer、Firefox等浏览器在网站含有由加密和未加密内容组成的混合内容时,会发出警告。

客户端实现

【Android测试技巧】02. 测试手机客户端HTTPS 你应该知道的事_第2张图片

为什么HTTPS慢 ?

TCP 只要三次握手就可以了,但建立在基于 TCP 的 SSL/TLS 除了那三次握手之外,还需要经过约十次握手进行密钥交换。基于 SSL 的 HTTPS 则需要在 SSL/TLS 建立连接的基础之上,使用握手产生密钥对数据进行加密处理。
由于 HTTPS 的连接过程及数据传送的过程涉及密钥交换、产生密钥、数据加密等一列的过程,因此打开一个 HTTPS 页面 10 秒左右是很正常的事情。

手机客户端使用HTTPS注意点


1. 手机是否支持CA认证,如果不支持或者没有应该怎么办?
查看手机的安全性,设置信任的CA(Certification Authority,认证中心),CA认证一般手机都支持的,但现如今的android手机泛滥,有些系统属于高度定制的,不敢保证所有的手机都支持CA认证,所以在进行需求评审的时候要做好相关的解决方案,如果手机上不支持CA认证应该怎么? 我们的做法是使用自己的证书进行认证。

2. 请求超时或失败时应该有相应的降级方案
如上所述,https请求会比http慢一些,用户的使用场景也不尽相同,仅靠我们在有限时间有限场景的测试是不够的,所以超时也是很常见的现像,那么当请求超时时应该怎么办呢? 我们的做法是请求超时达到一次的次数,切换为http,另外服务端加控制开关,当观察到请求超时数据过多时,可以关闭开关,切为http;

3. 适配手机网络
WIFI、三大运营商的2G、3G及接入点(cmwap\cmnet\uniwap\uninet\ctwap\ctnet),包括开启一些代理软件,这些适配是一定要做的,因为不同的网络和接入点的代理网关是不一样的,你使用的https是否能够穿透这些网关谁都不好说,所以只能对其进行适配。

4. 做好请求失败的埋点
做好https连接失败的埋点及log收集工作,方便排查问题,给用户带来更好的体验


【Android测试技巧】02. 测试手机客户端HTTPS 你应该知道的事_第3张图片


你可能感兴趣的:(android测试)