CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了
一 、HTTPS连接过程及中心人进击道理
如volley
1.https请求
客户端向办事端发送https请求;
2.生成公钥和私钥
办事端收到请求之后,生成公钥和私钥。公钥相当于是锁,私钥相当于是钥匙,只有私钥才能够打开公钥锁住的内容;
3.返回公钥
4.客户端验证公钥
客户端收到公钥之后,起首会验证其是否有效,如揭橥机构或者过不时光等,如不雅发明有问题就会抛出异常,提示证书存在问题。如不雅没有问题,那么就生成一个随机值,作为客户端的密钥,然后用办事端的公钥加密;
客户端用办事端的公钥加密密钥,然后发送给办事端。
6.办事端收取密钥,对称加密内容
https协定就是http+ssl协定,如下图所示为其连接过程:
办事端将公钥(证书)返回给客户端,公钥琅绫擎包含有很多信息,比如证书的揭橥机构、过不时光等等;
办事端收到经由加密的密钥,然后用私钥将其解密,获得客户端的密钥,然后办事端把要传输的内容和客户端的密钥进行对称加密,如许除非知道密钥,不然无法知道传输的内容。
7.加密传输
OKhttp3.0
办事端将经由加密的内容传输给客户端。
8.获取加密内容,解密
客户端获取加密内容后,用之前生成的密钥对其进行解密,获取到内容。
中心人劫持进击
https也不是绝对安然的,如下图所示为中心人劫持进击,中心人可以获取到客户端与办事器之间所有的通信内容。
中心人朝长进步客户端发送给办事器的请求,然后假装成客户端与办事器进行通信;将办事器返回给客户端的内容发送给客户端,假装成办事器与客户端进行通信。
经由过程如许的手段,便可以获取客户端和办事器之间通信的所有内容。
应用中心人进击手段,必须要让客户端信赖中心人的证书,如不雅客户端不信赖,则这种进击手段也无法发患咀用。
二、中心人进击的预防
造成中心人劫持的原因是 没有对办事端证书及域名做校验或者校验不完全,为了便利,直接采取开源框架默认的校验方法进行https请求
预防办法:
预防方法有两种
1 、针对安然性请求比较高的 app,可采取客户端预埋证书的方法锁逝世证书,只有当客户端证书和办事端的证书完全一致的情况下才许可通信,如一些银行类的app,但这种方法面对一个问题,证书过时的问题,因证书有必定的有效期,当预埋证书过时了,只有经由过程强迫更新或者请求用户下载证书来解决。
今朝很多应用都用webview加载H5页面,如不雅办事端采取的是可托CA揭橥的证书,在 webView.setWebViewClient(webviewClient) 时重载 WebViewClient的onReceivedSslError() ,如不雅出现证书缺点,直接调用handler.proceed()会忽视缺点持续加载证书有问题的页面,如不雅调用handler.cancel()可以终止加载证书有问题的页面,证书出现问题了,可以提示用户风险,让用户选择加载与否,如不雅是须要安然级别比较高,可以直接终止页面加载,提示用户收集情况有风险:
以volley为例:校验的实现方法如下
经由过程预埋证书创建 SSLSocketFactory;
- private static SSLSocketFactory buildSSLSocketFactory(Context context,
- int certRawResId) {
- KeyStore keyStore = null;
- try {
- keyStore = buildKeyStore(context, certRawResId);
推荐阅读
正如埃隆。马斯克(Elon Musk)和斯蒂芬。霍金(Stephen Hawking)等立异者近期评论的那样,在2017年,物联网(IoT)和人工智能在科技界扮演了重要角色。尽管行业专家估计IoT将会获得增长,但及时数据分析和云计算的持续立>>>详细阅读
本文标题:HTTPS连接过程以及中间人攻击劫持
地址:http://www.17bianji.com/lsqh/39420.html
1/2 1