http与https

一、什么是HTTP–不安全

HTTP:超文本传输协议,是一个基于请求与响应、无状态的,应用层的协议,基于TCP/IP通信协议来传递数据(HTML文件、图片文件等),互联网上最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。

**工作原理:**HTTP协议工作于客户端–服务端架构上,浏览器(HTTP客户端) 通过URL向HTTP服务器(即web服务器,如Apache–阿帕奇服务器) 发送请求。web服务器根据接收到的请求,向客户端发送响应信息。HTTP默认端口号为80,也可以自定义端口

二、HTTP发展历史
在这里插入图片描述
HTTP/1.1 属于常考的内容,到目前为止,还有很多的浏览器和服务器在使用中。目前很多都是HTTP/1.1 和 HTTP/2 混合使用。
在这里插入图片描述
这个Akamai公司建立的一个官方的演示,使用HTTP/1.1和HTTP/2同时请求379张图片,观察请求的时间,明显看出HTTP/2性能占优势–多路复用

在这里插入图片描述
多路复用:通过单一的HTTP/2连接请求发起多重的请求–响应信息,多个请求共享一个TCP连接,实现多留并行而不是依赖建立多个TCP连接。

三、HTTP报文格式

请求报文: 比如向服务器请求数据的时候,需要发**“一封信”**,那么这封信就叫做请求报文。 请求行+请求头+空行+请求数据
响应报文: 服务器返回给客户端数据,那么返回的整一块内容就叫做响应报文。 状态行+消息报头+空行+响应正文
在这里插入图片描述CRLF:回车换行符
请求实体主体:例如post请求携带的一些参数等

请求报文例图:

在这里插入图片描述
响应报文例图:

在这里插入图片描述
在这里插入图片描述

四、什么是HTTPS–安全

HTTPS: 身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立安全通信,加密数据包。HTTPS的主要目的是提供对网络服务器的身份认证,同时保护交换数据的隐私与完整性。

五、HTTP 与 HTTPS 的区别

HTTP特点:

  1. 无状态: 协议对客户端没有状态存储,对事物处理没有记忆能力–也就是说它不知道你是第几次请求过来,比如你上一次登录了请求了,但是你下一次请求的话,没有任何的凭证告诉我你已经登录过了,获取过什么信息,我不知道你是上一次请求的人。(缺点)
  2. 无连接:限制每次连接只处理一个请求。每次请求完都是断开的,再也没有联系了,如果你想请求数据,就再发送一次请求。 (缺点)
  3. 简单快速、灵活(优点)
  4. 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
  5. 通信使用明文传输,请求和响应不会对通信方进行确认,无法保护数据的安全性和完整性。

观察使用HTTP请求传输的数据:

在这里插入图片描述
结果分析:HTTP协议传输数据以明文形式显示

针对无状态的一些解决策略:

场景: 逛电商商城用户需要使用的时间比较长,需要对用户一段时间的HTTP通信状态进行保存,比如执行一次登录操作,在30分钟所有的请求不需要再次登录。
解决方案: 通过Cookies/Session

HTTPS特点:
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

在这里插入图片描述通过上述图片,可以看到数据不是明文传输,而且HTTPS有如下特点:

  1. 内容加密: 采用混合加密技术,中间者(发送请求中途窃取你数据的人)无法直接查看明文内容
  2. 验证身份: 通过证书认证客户端访问的是自己的服务器(也就是说:我们可以通过SSL证书认证知道我们访问的服务器是不是自己需要的,而不是冒牌的)
  3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改

六、HTTP通信传输
在这里插入图片描述客户端输入URL回车,DNS解析域名得到服务器的ip地址,服务器在80端口监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接。HTTP属于TCP/IP模型中的运用层协议,所以通信过程其实对应数据的入栈和出栈。
在这里插入图片描述
报文从应用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接。
在这里插入图片描述为什么需要三次握手呢?为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

比如:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段,但是server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了,由于client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。所以没有采用“三次握手”,这种情况下server的很多资源就白白浪费掉了。

为什么需要四次挥手呢?

TCP是全双工模式,当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它的数据已经全部发送完毕了;但是,这个时候client还是可以接受来server的数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client的;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了,就会告诉client,我也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快的中断这次TCP连接。

七、HTTPS实现原理

SSL建立连接过程
在这里插入图片描述

  1. client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机值1和客户端支持的加密算法。
  2. server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集。
  3. 随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
  4. 客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(预主秘钥)。
  5. 客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。
  6. 传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
  7. 服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。
  8. 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。
  9. 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。

问题:

1.怎么保证保证服务器给客户端下发的公钥是真正的公钥,而不是中间人伪造的公钥呢?
在这里插入图片描述

2.证书如何安全传输,被掉包了怎么办?
在这里插入图片描述

数字证书内容

包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。

验证证书安全性过程

  1. 当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名,数字签名经过CA公钥解密得到证书信息摘要。
  2. 然后证书签名的方法计算一下当前证书的信息摘要,与收到的信息摘要作对比,如果一样,表示证书一定是服务器下发的,没有被中间人篡改过。因为中间人虽然有权威机构的公钥,能够解析证书内容并篡改,但是篡改完成之后中间人需要将证书重新加密,但是中间人没有权威机构的私钥,无法加密,强行加密只会导致客户端无法解密,如果中间人强行乱修改证书,就会导致证书内容和证书签名不匹配。

那第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?(伪装服务端一样的配置)

显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名。

八、运用与总结

安全性考虑:

  1. HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用
  2. SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行
中间人攻击(MITM攻击)是指,黑客拦截并篡改网络中的通信数据。又分为被动MITM和主动MITM,被动MITM只窃取通信数据而不修改,而主动MITM不但能窃取数据,还会篡改通信数据。最常见的中间人攻击常常发生在公共wifi或者公共路由上。

成本考虑:

  1. SSL证书需要购买申请,功能越强大的证书费用越高
  2. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows
    XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
  3. 根据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。
  4. HTTPS连接缓存不如HTTP高效,流量成本高。
  5. HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
  6. HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值