阅读本篇需要对HTTP协议有最基本的了解。 借用《图解密码技术》里的图片,我们以如下一个购物场景开始介绍:
在网购过程中,如果使用纯粹的HTTP协议,那么用户的账号密码,信用卡,银行卡信息都将在信息传输过程中直接裸奔。从例子中我们可以看到信用卡信息直接被明文传输了。除了明文传输之外,还存在着以下两个问题:
常规情况下,可以对通信的内容进行加密,来避免明文传输的问题。但是单靠这点,无法解决信息完整性和认证问题。为了解决这些问题,需要对通信进行加密。也就引入了 HTTPS 。
HTTPS 本身并不是一个协议,它使用 SSL/TLS 作为对通信加密的协议,承载 HTTP ,将两种协议叠加,来实现对 HTTP 通信进行加密的目的。二者的关系为 HTTP+加密+认证+完整性保护=HTTPS 单纯从层次上对比二者的差异为:
即在 HTTP 协议下又加了一层 SSL,计算机网络通信过程的信息流动方向是发送方信息由上到下进行包装,然后接收方将信息由下到上进行解包。上述的购物场景,如果使用了 SSL/TLS 承载 HTTP,那么通信的流程将会变化成如下图:
无论是客户端,还是服务端,消息发送的时候,都是从上往下,经过了 SSL/TLS 加密,然后接收的时候再由下往上解密。
看到这里你可能对流程已经有所理解,但又存在疑惑: SSL/TLS 是什么东西?
SSL(Secure Socket Layer),称为安全套接层,是1994年网景公司设计的一种安全协议,用于解决了网络通信安全和数据完整性问题。第一个版本的TLS(Transport Layer Security) 是在 SSL3.0基础上设计的,可以理解为 SSL 3.1。后续的 TLS 版本又加入了更多特性,可以把它理解为是 SSL 的升级版。
目前普遍的说法是 SSL/TLS 无法确切地被划分到 OSI 或者 TCP/IP 的具体某一层。从逻辑上来讲,SSL/TLS 的加密功能正好能和 OSI的表示层相对应,但是一些应用程序会把它当做传输层。所以比较保守的说法是SSL/TLS介于传输层和应用层之间。
SSL/TLS 不仅可以承载 HTTP,也可以承载其他应用层协议。
协议本身可以分成两层,上层是握手协议,下层是记录协议。如下图:
上层又分成了4个子协议,其中第一个握手协议是最重要的,它的作用是确认双方使用的密码套件,双方共享密钥,基于证书的认证操作。 其他三个子协议的作用分别是:
记录协议位于下层,它的作用是使用对称加密的方式对消息进行加密通信,过程可以再进一步细分为:
将消息分割成多个片段,每个片段进行压缩。
压缩后的片段,加上消息认证码,用于保证完整性,并进行数据认证。消息认证码的密钥在握手结束后可以生成,下面会介绍。
上面生成的东西,通过对称加密,加密使用CBC模式,而CBC模式的初始化向量,以及对称加密的密钥,都可以在握手完成,通过主密码生成,下面会介绍。
经过上面加密之后,再加上一个报头,就是最后的报文数据了。这个报头由数据类型,版本号,压缩后的长度组成。其中数据类型是上层握手协议的4个子协议之一。
我们知道 HTTP 是基于 TCP 来完成的,TCP有握手过程,HTTPS同样也有握手过程。当我们谈论 HTTPS的时候,其实更侧重的是谈论 SSL。
默认情况下 HTTP 通信,客户端会打开一条到服务器端口80的连接。而 HTTPS 则会打开一条到服务器端口443的连接。 TCP 连接建立后,会初始化 SSL,沟通加密参数,交换密钥,完成握手过程后,SSL 初始化完成。然后就可以加密通信了。
我们在谈论HTTPS握手过程,其实就是SSL的握手过程。这个握手过程分成4个部分。下面将详细地解析这4个部分。
客户端向服务端发送Client Hello,告诉服务端它能理解的密码套件(RSA/3DES等),压缩方式,会话id,当前时间,SSL/TLS 协议的可用版本,客户端随机数。
HTTPS 采用了混合加密机制。在握手环节使用公钥加密方式。通信建立后,交换报文时,使用共享密钥加密,也就是上面第3和第4点。对称加密会比非对称加密快很多,提高通信过程的效率。共享密钥的生成过程,可以从这张图中去理解。
客户端和服务端可以拥有一样的预备主密码,在握手的开始阶段,双方协商了共同使用什么密码套件。预备主密码同时使用由密码套件中两个单向散列函数(MD5和SHA-1)组合的伪随机数生成器,生成主密码(客户端的预备主密码也是使用伪随机数生成)。两端都会根据这个一样的预备主密码,计算出一样的主密码。然后再由一样的主密码,生成下面三个:
每一样都有两份,即客户端发往服务端,和服务端发往客户端。所以主密码一共可以生成6种信息。
以上就是HTTPS握手过程的详细解析。握手建立完成后,客户端和服务端有拥有对称加密的密钥,那么就可以使用这个密钥对通信内容进行加密了。
总结一下,HTTPS多做了什么,它和HTTP有什么不一样。
如果你对网络安全感兴趣,学习资源免费分享,保证100%免费!!!(嘿客入门教程)
👉网安(嘿客)全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
压箱底的好资料,全面地介绍网络安全的基础理论,包括逆向、八层网络防御、汇编语言、白帽子web安全、密码学、网络安全协议等,将基础理论和主流工具的应用实践紧密结合,有利于读者理解各种主流工具背后的实现机制。
面试题资料
独家渠道收集京东、360、天融信等公司测试题!进大厂指日可待!
工欲善其事必先利其器。学习嘿客常用的开发软件都在这里了,给大家节省了很多时间。