一文带你搞懂 HTTP 和 HTTPS
1 二者简单介绍和各自在 ISO 七层网络模型中的位置
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
两者在七层网络模型中的位置(图片来源于大涛网络神图):
2 HTTP 协议报文详解
2.1 发展阶段
HTTP/0.9
0.9 协议是适用于各种数据信息的简洁快速协议,但是远不能满足日益发展的各种应用的需要。0.9 协议就是一个交换信息的无序协议,仅仅限于文字。由于无法进行内容的协商,在双发的握手和协议中,并有规定双发的内容是什么,也就是图片是无法显示和处理的。
HTTP/1.0
HTTP1.0 定义了三种请求方法:GET、POST 和 HEAD 方法
HTTP/1.1(当前主流)
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
HTTP/2.0
HTTP2.0 大幅度的提高了 web 性能,在 HTTP1.1 完全语义兼容的基础上,进一步减少了网络的延迟。实现低延迟高吞吐量。
2.2 请求方法
2.3 报文格式
wireshark 抓取报文:
请求报文:
响应报文:
由此我们可以看出 HTTP 报文的大致格式:
3 HTTPS 协议报文详解
3.1 区别于 HTTP 的主要作用
HTTPS 协议的主要作用可以分为两种:
建立一个信息安全通道,来保证数据传输的安全
确认网站的真实性
3.2 报文格式
HTTPS 的协议名称并不是 HTTPS,而是 TSL,我们再次利用 whireshark 进行抓包:
我们点开一个报文组可以发现,TLS 的上层就是 HTTP,并且利用了 SHA-256 加密算法进行了加密。
3.3 TLS 和 SSL
我们经常说,HTTPS=HTTP+SSL/TLS,那么我们就来一探究竟,什么是 TLS 和 SSL
SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL 通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL 记录协议和 SSL 握手协议。
TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS 记录协议和 TLS 握手协议。
两者区别:
最新版本的 TLS(Transport Layer Security,传输层安全协议)是 IETF(Internet Engineering Task Force,Internet 工程任务组)制定的一种新的协议,它建立在 SSL 3.0 协议规范之上,是 SSL 3.0 的后续版本。在 TLS 与 SSL3.0 之间存在着显著的差别,主要是它们所支持的加密算法不同,所以 TLS 与 SSL3.0 不能互操作。
1.TLS 与 SSL 的差异
1)版本号:TLS 记录格式与 SSL 记录格式相同,但版本号的值不同,TLS 的版本 1.0 使用的版本号为 SSLv3.1。
2)报文鉴别码:SSLv3.0 和 TLS 的 MAC 算法及 MAC 计算的范围不同。TLS 使用了 RFC-2104 定义的 HMAC 算法。SSLv3.0 使用了相似的算法,两者差别在于 SSLv3.0 中,填充字节与密钥之间采用的是连接运算,而 HMAC 算法采用的是异或运算。但是两者的安全程度是相同的。
3)伪随机函数:TLS 使用了称为 PRF 的伪随机函数来将密钥扩展成数据块,是更安全的方式。
4)报警代码:TLS 支持几乎所有的 SSLv3.0 报警代码,而且 TLS 还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知 CA(unknown_ca)、拒绝访问(access_denied)等。
5)密文族和客户证书:SSLv3.0 和 TLS 存在少量差别,即 TLS 不支持 Fortezza 密钥交换、加密算法和客户证书。
6)certificate_verify 和 finished 消息:SSLv3.0 和 TLS 在用 certificate_verify 和 finished 消息计算 MD5 和 SHA-1 散列码时,计算的输入有少许差别,但安全性相当。
7)加密计算:TLS 与 SSLv3.0 在计算主密值(master secret)时采用的方式不同。
8)填充:用户数据加密之前需要增加的填充字节。在 SSL 中,填充后的数据长度要达到密文块长度的最小整数倍。而在 TLS 中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为 255 字节),这种方式可以防止基于对报文长度进行分析的攻击。
2.TLS 的主要增强内容
TLS 的主要目标是使 SSL 更安全,并使协议的规范更精确和完善。TLS 在 SSL v3.0 的基础上,提供了以下增强内容:
1)更安全的 MAC 算法
2)更严密的警报
3)“灰色区域”规范的更明确的定义
3.TLS 对于安全性的改进
4 HTTP 和 HTTPS 两者最终对比
4.1 相同点
都是基于 TCP 的面向连接的应用层协议并且都为无状态连接
都是主要应用于浏览器端
4.2 不同点
HTTP 端口默认为 80,HTTPS 端口默认为 443
HTTP 为明文传输,HTTPS 为加密传输,因此 HTTPS 相比 HTTP 更安全
HTTP 更为简单快速,HTTPS 更为复杂
参考文章:
https://www.cnblogs.com/wqhwe/p/5407468.html
https://www.runoob.com/http/http-methods.html
https://baike.baidu.com/item/HTTP/243074?fr=aladdin
https://www.cnblogs.com/klguang/p/4618526.html
版权声明: 本文为 InfoQ 作者【Barry Yan】的原创文章。
原文链接:【http://xie.infoq.cn/article/6ec12ea5ae285e5e522935a0b】。文章转载请联系作者。
评论