一文带你洞察HTTP和HTTPS,再也不怕面试官了!

302 阅读7分钟

HTTP与HTTPS的区别

观察上面两幅图,一个是访问域名http://web.4399.com/,谷歌浏览器提示连接不安全,第二个是访问广东海洋大学的官网https://gdou.edu.cn,浏览器显示安全,为什么会这样子呢?

1. HTTP和HTTPS的发展历史

什么是HTTP协议?

HTTP是一种超文本传输协议,一种基于请求和响应、无状态的、应用层的协议,常用于TCP/IP协议传输数据,是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP协议的初衷是为了发布和接收HTML页面的方法。 HTTP协议的发展历史

版本 产生时间 内容 发展现状
HTTP/0.9 1991年 不涉及数据包传输,规定客户端与服务器之间的通信格式,只能使用GET请求 没有作为正式的标准
HTTP/1.0 1996年 传输内容的格式不受限制,增加了PUT、PATCH、HEAD、OPTIONS、DELETE命令 正式作为标准
HTTP/1.1 1997年 增加了持久连接(长连接)、节约带宽、Host域、管道机制、分块传输编码 2015年使用最为广泛
HTTP/2.0 2015年 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场

这是Akamai公司建立的一个官方的演示,使用HTTP/1.1和HTTP/2.0各自同时请求379张照片,从请求的时间可以看出HTTP/2.0的性能占优势。

HTTP/2.0的多路复用机制:通过单一的HTTP/2.0连接请求发出多重的请求-响应信息,多个stream共享一个TCP连接,实现多流并行而不是依赖多个TCP连接。

HTTP报文格式

2. HTTP VS HTTPS

HTTP的特点

  1. 无状态:HTTP协议没有对客户端进行状态存储,对事物没有“记忆能力”,也就说每一次发起请求对于服务器来说都是一个新的客户端请求。
  2. 无连接HTTP/1.1之前,由于无状态的特点,每次连接都需要进行三次握手和四次挥手
  3. 基于请求和响应:由客户端发起请求,服务器响应
  4. 通信使用明文,请求和响应不会对通信方进行确认、无法保证数据的完整性

结果分析:可以看到HTTP协议传输数据全部采用明文形式显示,可以看到如果用Post请求被抓包之后,获取到用户名和密码就GG了

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

  1. 采用Cookie/Session技术
  2. HTTP/1.1持久连接(Keep-alive),只要任意一端没有明确提出断开连接,则保持TCP的连接状态,请求头字段中的Connection:Keep-alive表明使用了持久连接

HTTPS的特点

基于HTTP协议,采用SSL认证机制加密处理数据,验证对方身份以及数据完整性保护

通过抓包可以看到数据并不是明文传输,也就是说被加密了,而且HTTPS具有以下特点:

  1. 内容加密:采用混合加密技术,中间者无法直接查看明文信息
  2. 验证身份:通过证书认证客户端访问的是自己的服务器
  3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改

进一步了解HTTPS前需要了解的几种加密方式

对称加密:客户端与服务器使用的是同一个密钥,所以称为对称加密。密钥只有一个,即为私钥,常用的对称加密算法有:DES、AES、3DES等等;

非对称加密:加密和解密使用的不是同一个密钥,一个作为公开的密钥分发给信任的客户端,另一个作为私钥保存在服务器。公钥加密的信息,只有私钥才能解密;私钥加密的信息,只有公钥才能解密,常见的非对称加密算法:RSA,ECC

最简单的非对称加密的执行流程

交换公钥后就可以利用对方的公钥对明文信息进行加密发送,对方接收到后可以用私钥进行解密,当然在实际信息交流中不只是直接对明文进行加密,在加密前还会做一步散列的操作,这一点有兴趣自行上网详细了解:

HTTPS的加密方式

混合加密:结合对称加密和非对称加密方式。客户端A使用对称密钥对明文信息进行加密形成密文1.0,然后再使用非对称加密的公钥B对密文进行再次加密形成密文2.0;然后客户端B使用私钥B对密文2.0进行解密得到密文1.0,然后再使用对称密钥对密文1.0解密得到明文信息。即使被黑客拦截掉,由于黑客没有对应的私钥对密文2.0解密,也就无法获得密文1.0,更无法获得明文。

数字摘要:通过单向Hash函数对原文进行哈希,将需要加密的明文进行“哈希”得到一串固定长度的密文(称为数字摘要),不同明文摘要成的密文其结果总是不相同的相同的明文使用相同的Hash函数形成的明文摘要必定一致,并且即使知道了数字摘要也不能反推出明文。

数字签名:数字签名建立在公钥加密技术基础之上,结合混合加密和数字摘要技术,产生了数字签名这一说法,产生这一项技术的原因在于进一步对明文的安全性进行提高。

混合加密流程图解

数字签名流程

3. HTTP通信传输

4. HTTPS实现原理

  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. 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果Z客户端能够正常接受的话表明SSL层连接建立完成了。

参考博客:blog.csdn.net/xiaoming100…

如有侵权,请立即通知作者,立即删除此贴,仅用于学习交流,转载请说明出处!欢迎交流~