谈谈HTTPS安全认证,抓包与反抓包策略

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢个人文章,欢迎关注个人微信公众号。
file

协议是指计算机通讯网络中两台计算机之间进行通讯所必须共同遵照的规定或规则,超文本传输协议(HTTP)是一种通讯协议,它容许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。HTTP协议,即超文本传输协议是一种详细规定了浏览器和万维网服务器之间互相通讯的规则,经过因特网传送万维网文档的数据传送协议。HTTP协议是用于从万维网服务器传输超文本到本地浏览器的传送协议。它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。众所周知,HTTP是一个无状态的应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。在Internet中全部的传输都是经过TCP/IP进行的。HTTP协议做为TCP/IP模型中应用层的协议也不例外。HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了咱们常说的HTTPS。以下图所示:
file算法

而你们都很清楚TCP/IP共分为四层:应用层、传输层、网络层、数据链路层; 为何TCP/IP要分红四层呢?意思何在呢?其实主要缘由是因为分层可以解耦,动态替换层内协议,不一样层各司其责: 应用层:向用户提供应用服务时的通信活动(ftp,dns,http) 传输层:网络链接中两台计算机的数据传输(tcp、udp) 网络层:处理网络上流动的数据包,经过怎样的传输路径把数据包传送给对方(ip) 数据链路层:与硬件相关的网卡、设备驱动等等。segmentfault

可是HTTP也有几个较为显著的缺点:浏览器

  • 通讯使用明文,内容容易被抓包泄露
  • 不验证通讯方的身份,所以有可能遭遇假装
  • 没法证实报文的完整性,因此有可能遭到篡改

正是因为这几个显著的缺点存在,因此HTTPS应运而生。https俗称超文本传输安全协议。是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。HTTPS是在HTTP的基础上加上一层安全层,用于数据加密、解密、身份认证,即安全

  • HTTP + 加密 + 认证 = HTTPS

说到加密,开发人员基本都不会陌生。咱们日常开发中接触形形色色的加密算法,简单来讲分为对称加密算法与非对称加密算法以及散列算法。算法的区别在哪呢?咱们能够这么来理解三种算法的区别:服务器

  • 对称加密算法:加密和解密数据使用同一个密钥。这种加密方式的特色是速度很快。
  • 非对称加密算法:数据用公钥加密后必须用私钥解密,数据用私钥加密后必须用公钥解密。这种加密方式的特色是速度慢,CPU 开销大。
  • 散列算法:没有秘钥,目前没法反向解密。(暴力破解除外)

咱们为何须要加密?咱们平常生活中登陆密码或者各类隐私信息都须要进行加密保存防止信息泄露。那咱们接下来来看看这三种算法类型分别有什么样的算法呢:微信

  • 对称加密算法:目前主流算法有DES算法,3DES算法,AES算法
  • 非对称加密算法:目前主流算法有RSA算法
  • 散列算法:目前主要以MD5和SHA-1算法为主

CA证书:CA证书CA证书内含服务端公钥与私钥,使用hash散列函数计算明文信息的信息摘要,而后采用CA证书内含的私钥对信息摘要进行加密最终生成签名。即:证书 = 公钥 + 签名 +申请者和颁发者的信息。客户端中由于在操做系统中就预置了CA的公钥,因此支持解密签名。网络

知道了上面这些基础知识,接下来咱们一块儿了解HTTPS如何进行安全认证,首先主要有单向认证和双向认证两种认证方式:tcp

单向认证
file
从上图能够看出,单向认证过程以下:函数

  • 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。
  • 服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书
  • 客户端使用服务端返回的信息验证服务器的合法性,包括:工具

    1. 证书是否过时
    2. 发行服务器证书的CA是否可靠
    3. 返回的公钥是否能正确解开返回证书中的数字签名
    4. 服务器证书上的域名是否和服务器的实际域名相匹
    5. 验证经过后,将继续进行通讯,不然,终止通讯
  • 客户端向服务端发送本身所能支持的对称加密方案,供服务器端进行选择
  • 服务器端在客户端提供的加密方案中选择加密程度最高的加密方式。
  • 服务器将选择好的加密方案经过明文方式返回给客户端
  • 客户端接收到服务端返回的加密方式后,使用该加密方式生成产生随机码,用做通讯过程当中对称加密的密钥,使用服务端返回的公钥进行加密,将加密后的随机码发送至服务器
  • 服务器收到客户端返回的加密信息后,使用本身的私钥进行解密,获取对称加密密钥。 在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通讯过程当中信息的安全。

HTTPS双向认证
单向认证客户端只须要认证服务端,而在双向认证中服务端一样须要对客户端进行认证: 双向认证具体过程以下:
file

  • 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。
  • 服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书,即公钥证书
  • 客户端使用服务端返回的信息验证服务器的合法性,包括:

    1. 证书是否过时
    2. 发行服务器证书的CA是否可靠
    3. 返回的公钥是否能正确解开返回证书中的数字签名
    4. 服务器证书上的域名是否和服务器的实际域名相匹配
    5. 验证经过后,将继续进行通讯,不然,终止通讯
  • 服务端要求客户端发送客户端的证书,客户端会将本身的证书发送至服务端
  • 验证客户端的证书,经过验证后,会得到客户端的公钥
  • 客户端向服务端发送本身所能支持的对称加密方案,供服务器端进行选择
  • 服务器端在客户端提供的加密方案中选择加密程度最高的加密方式
  • 将加密方案经过使用以前获取到的公钥进行加密,返回给客户端
  • 客户端收到服务端返回的加密方案密文后,使用本身的私钥进行解密,获取具体加密方式,然后,产生该加密方式的随机码,用做加密过程当中的密钥,使用以前从服务端证书中获取到的公钥进行加密后,发送给服务端
  • 服务端收到客户端发送的消息后,使用本身的私钥进行解密,获取对称加密的密钥,在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通讯过程当中信息的安全。

可是HTTPS即便号称超文本传输安全协议,也是很容易被抓包的,通常能够经过Charles、fildder等工具做为中间层,进行身份的假装:对客户端假装成服务端,对服务端假装成客户端: 截获客户端的HTTPS请求,假装成客户端去向服务端发送HTTPS请求 接受服务端返回,用本身的证书假装成服务端向客户端发送数据内容。

具体过程以下图所示:
file
反抓包策略 那咱们应该如何防止被抓包呢?可使用SSL-Pinning技术来反抓包。由于被抓包主要是因为伪造了一个假的服务端证书给了客户端,音粗能够同时在客户端也保存一份服务端的证书,就能够知道数据来源的证书是否是真实服务端来源了。SSL-pinning有两种方式: 证书锁定(Certificate Pinning) 公钥锁定(Public Key Pinning)

证书锁定
证书锁定是SSL/TLS加密的额外保证手段。它会将服务器的证书公钥预先保存在客户端。在创建安全链接的过程当中,客户端会将预置的公钥和接受的证书作比较。若是一致,就创建链接,不然就拒绝链接。在客户端设置证书只容许设置指定域名的证书,而不接受操做系统或浏览器内置的CA根证书对应的任何证书。

公钥锁定
HTTP公钥锁定是HTTPS网站防止攻击者CA机构错误签发的证书进行中间人攻击的一种安全机制,用于预防CA遭受入侵或其余会形成CA签发未受权证书的状况。采用公钥锁定时,网站会提供已受权公钥的哈希列表,指示客户端在后续通信中只接受列表上的公钥。提取证书中的公钥并内置到客户端中,经过与服务器对比公钥值来验证链接的正确性。

HTTPS和HTTP的区别
https协议须要到ca申请证书,通常免费证书不多,须要交费。 http是超文本传输协议,信息是明文传输,https 则是具备安全性的ssl加密传输协议。 http和https使用的是彻底不一样的链接方式用的端口也不同,前者是80,后者是443。 http的链接很简单,是无状态的。 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS解决的问题
防止第三方冒充服务器。 防止第三方拦截通讯报文,窃取通讯中请求报文、响应报文的内容。 防止第三方拦截通讯报文,篡改报文内容。

欢迎关注我我的公众号:程序猿周先森
file

相关文章
相关标签/搜索