文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢个人文章,欢迎关注个人微信公众号。
![]()
协议是指计算机通讯网络中两台计算机之间进行通讯所必须共同遵照的规定或规则,超文本传输协议(HTTP)是一种通讯协议,它容许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。HTTP协议,即超文本传输协议是一种详细规定了浏览器和万维网服务器之间互相通讯的规则,经过因特网传送万维网文档的数据传送协议。HTTP协议是用于从万维网服务器传输超文本到本地浏览器的传送协议。它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。众所周知,HTTP是一个无状态的应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。在Internet中全部的传输都是经过TCP/IP进行的。HTTP协议做为TCP/IP模型中应用层的协议也不例外。HTTP协议一般承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了咱们常说的HTTPS。以下图所示:算法
而你们都很清楚TCP/IP共分为四层:应用层、传输层、网络层、数据链路层; 为何TCP/IP要分红四层呢?意思何在呢?其实主要缘由是因为分层可以解耦,动态替换层内协议,不一样层各司其责: 应用层:向用户提供应用服务时的通信活动(ftp,dns,http) 传输层:网络链接中两台计算机的数据传输(tcp、udp) 网络层:处理网络上流动的数据包,经过怎样的传输路径把数据包传送给对方(ip) 数据链路层:与硬件相关的网卡、设备驱动等等。segmentfault
可是HTTP也有几个较为显著的缺点:浏览器
通讯使用明文,内容容易被抓包泄露
不验证通讯方的身份,所以有可能遭遇假装
没法证实报文的完整性,因此有可能遭到篡改
正是因为这几个显著的缺点存在,因此HTTPS应运而生。https俗称超文本传输安全协议。是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。HTTPS是在HTTP的基础上加上一层安全层,用于数据加密、解密、身份认证,即安全
说到加密,开发人员基本都不会陌生。咱们日常开发中接触形形色色的加密算法,简单来讲分为对称加密算法与非对称加密算法以及散列算法。算法的区别在哪呢?咱们能够这么来理解三种算法的区别:服务器
咱们为何须要加密?咱们平常生活中登陆密码或者各类隐私信息都须要进行加密保存防止信息泄露。那咱们接下来来看看这三种算法类型分别有什么样的算法呢:微信
CA证书:CA证书CA证书内含服务端公钥与私钥,使用hash散列函数计算明文信息的信息摘要,而后采用CA证书内含的私钥对信息摘要进行加密最终生成签名。即:证书 = 公钥 + 签名 +申请者和颁发者的信息。客户端中由于在操做系统中就预置了CA的公钥,因此支持解密签名。网络
知道了上面这些基础知识,接下来咱们一块儿了解HTTPS如何进行安全认证,首先主要有单向认证和双向认证两种认证方式:tcp
单向认证
从上图能够看出,单向认证过程以下:函数
客户端使用服务端返回的信息验证服务器的合法性,包括:工具
HTTPS双向认证
单向认证客户端只须要认证服务端,而在双向认证中服务端一样须要对客户端进行认证: 双向认证具体过程以下:
客户端使用服务端返回的信息验证服务器的合法性,包括:
可是HTTPS即便号称超文本传输安全协议,也是很容易被抓包的,通常能够经过Charles、fildder等工具做为中间层,进行身份的假装:对客户端假装成服务端,对服务端假装成客户端: 截获客户端的HTTPS请求,假装成客户端去向服务端发送HTTPS请求 接受服务端返回,用本身的证书假装成服务端向客户端发送数据内容。
具体过程以下图所示:
反抓包策略 那咱们应该如何防止被抓包呢?可使用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解决的问题
防止第三方冒充服务器。 防止第三方拦截通讯报文,窃取通讯中请求报文、响应报文的内容。 防止第三方拦截通讯报文,篡改报文内容。
欢迎关注我我的公众号:程序猿周先森