欢迎访问智唯网络!专业H5响应式营销型网站建设、百度seo优化、网络推广服务!
营销之道 干货分享
了解企业新动态,分享前沿的营销推广干货,成长路上,我们携手同行
网站建设News

HTTPS连接过程以及中间人攻击劫持

发布时间:2017:12:04 16:10:35 | 已阅: | 作者:智唯小编 | 来源:智唯网络 | 共 0 条评论

扫一扫
手机访问

本文共有1445个文字,预计阅读时间4分钟
导语
A5创业网是国内领先的创业资讯和服务平台,提供权威的创业资讯和精准的品牌营销服务。以创业融资动态、创业学院、产品经理、人物访谈为内容驱动,与互联网创业者共同进步。

  一 、HTTPS连接过程及中间人攻击原理

  https协议就是http+ssl协议,,如下图所示为其连接过程:

  

HTTPS连接过程以及中间人攻击劫持

  1.https请求

  客户端向服务端发送https请求;

  2.生成公钥和私钥

  服务端收到请求之后,生成公钥和私钥。公钥相当于是锁,私钥相当于是钥匙,只有私钥才能够打开公钥锁住的内容;

  3.返回公钥

  服务端将公钥(证书)返回给客户端,公钥里面包含有很多信息,比如证书的颁发机构、过期时间等等;

  4.客户端验证公钥

  客户端收到公钥之后,首先会验证其是否有效,如颁发机构或者过期时间等,如果发现有问题就会抛出异常,提示证书存在问题。如果没有问题,那么就生成一个随机值,作为客户端的密钥,然后用服务端的公钥加密;

  5.发送客户端密钥

  客户端用服务端的公钥加密密钥,然后发送给服务端。

  6.服务端收取密钥,对称加密内容

  服务端收到经过加密的密钥,然后用私钥将其解密,得到客户端的密钥,然后服务端把要传输的内容和客户端的密钥进行对称加密,这样除非知道密钥,否则无法知道传输的内容。

  7.加密传输

  服务端将经过加密的内容传输给客户端。

  8.获取加密内容,解密

  客户端获取加密内容后,用之前生成的密钥对其进行解密,获取到内容。

  中间人劫持攻击

  https也不是绝对安全的,如下图所示为中间人劫持攻击,中间人可以获取到客户端与服务器之间所有的通信内容。

  HTTPS连接过程以及中间人攻击劫持

  中间人截取客户端发送给服务器的请求,然后伪装成客户端与服务器进行通信;将服务器返回给客户端的内容发送给客户端,伪装成服务器与客户端进行通信。

  通过这样的手段,便可以获取客户端和服务器之间通信的所有内容。

  使用中间人攻击手段,必须要让客户端信任中间人的证书,如果客户端不信任,则这种攻击手段也无法发挥作用。

  二、中间人攻击的预防

  造成中间人劫持的原因是 没有对服务端证书及域名做校验或者校验不完整,为了方便,直接采用开源框架默认的校验方式进行https请求

  如volley

  HTTPS连接过程以及中间人攻击劫持

  HTTPS连接过程以及中间人攻击劫持

  OKhttp3.0

  HTTPS连接过程以及中间人攻击劫持

  预防方法:

  预防方式有两种

  1 、针对安全性要求比较高的 app,可采取客户端预埋证书的方式锁死证书,只有当客户端证书和服务端的证书完全一致的情况下才允许通信,如一些银行类的app,但这种方式面临一个问题,证书过期的问题,因证书有一定的有效期,当预埋证书过期了,只有通过强制更新或者要求用户下载证书来解决。

  以volley为例:校验的实现方式如下

  通过预埋证书创建 SSLSocketFactory;

  private static SSLSocketFactory buildSSLSocketFactory(Context context,

  int certRawResId) {

  KeyStore keyStore = null;

  try {

  keyStore = buildKeyStore(context, certRawResId);

  } catch (KeyStoreException e) {

  e.printStackTrace();

  } catch (CertificateException e) {

  e.printStackTrace();

  } catch (NoSuchAlgorithmException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }

  String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();

  TrustManagerFactory tmf = null;

  try {

  tmf = TrustManagerFactory.getInstance(tmfAlgorithm);

  tmf.init(keyStore);

  } catch (NoSuchAlgorithmException e) {

  e.printStackTrace();

  } catch (KeyStoreException e) {

  e.printStackTrace();

  }

  SSLContext sslContext = null;

  try {

  sslContext = SSLContext.getInstance("TLS");

  } catch (NoSuchAlgorithmException e) {

  e.printStackTrace();

  }

  try {

  sslContext.init(null, tmf.getTrustManagers(), null);

  } catch (KeyManagementException e) {

  e.printStackTrace();

  }

  return sslContext.getSocketFactory();

  生成 经过ssl校验及 域名校验的connection

  HTTPS连接过程以及中间人攻击劫持

  HTTPS连接过程以及中间人攻击劫持

  2 针对安全性要求一般的app,可采用通过校验域名,证书有效性、证书关键信息及证书链的方式

  以volley为例,重写HTTPSTrustManager 中的checkServerTrusted 方法,同时开启域名强校验

  三、Webview的HTTPS安全

如何建站:
建网站需要准备哪些资料 如何购买域名空间 协助备案 成功案例 真实见证 建站类型有哪些 收费标准 建站流程 制作周期 改版美化 提升有户体验 [建站必看]源码内容交付 联系客服 专业建站

看了这篇文章的人还看了

专业建站 免费排名(有什么疑问的请留言或咨询在线客服)
  • 全部评论(0
    还没有评论,快来抢沙发吧!

上一篇:前端本地文件操作与上传

下一篇:中小企业建站需求巨大 企业建站首先智能化建站

  • 同行价格

    统一报价,无隐形消费

  • 金牌服务

    一对一专属顾问,7*24小时金牌服务

  • 售后无忧

    完善售后,客服经理全程跟进

建站优化二维码
建站优化二维码

截屏,微信识别二维码

微信号:13825575516

(点击微信号复制,添加好友)

优化二维码打开微信