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年 | 多路复用、服务器推送、头信息压缩、二进制协议等 | 逐渐覆盖市场 |
HTTP报文格式
2. HTTP VS HTTPS
HTTP的特点
结果分析:可以看到HTTP协议传输数据全部采用明文形式显示,可以看到如果用Post请求被抓包之后,获取到用户名和密码就GG了
- 无状态:HTTP协议没有对客户端进行状态存储,对事物没有“记忆能力”,也就说每一次发起请求对于服务器来说都是一个新的客户端请求。
- 无连接:HTTP/1.1之前,由于无状态的特点,每次连接都需要进行三次握手和四次挥手
- 基于请求和响应:由客户端发起请求,服务器响应
- 通信使用明文,请求和响应不会对通信方进行确认、无法保证数据的完整性
针对无状态的一些解决策略:
- 采用Cookie/Session技术
- HTTP/1.1持久连接(Keep-alive),只要任意一端没有明确提出断开连接,则保持TCP的连接状态,请求头字段中的Connection:Keep-alive表明使用了持久连接
HTTPS的特点
基于HTTP协议,采用SSL认证机制加密处理数据,验证对方身份以及数据完整性保护
通过抓包可以看到数据并不是明文传输,也就是说被加密了,而且HTTPS具有以下特点:
- 内容加密:采用混合加密技术,中间者无法直接查看明文信息
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改
进一步了解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实现原理
- client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机值1和客户端支持的加密算法。
- server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集。
- 随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
- 客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(预主秘钥)。
- 客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。
- 传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
- 服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。
- 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。
- 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果Z客户端能够正常接受的话表明SSL层连接建立完成了。
参考博客:blog.csdn.net/xiaoming100…
如有侵权,请立即通知作者,立即删除此贴,仅用于学习交流,转载请说明出处!欢迎交流~