HTTPS
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
SSL:安全套接字层
TLS:传输层安全
如上图所示 HTTPS 相比 HTTP 多了一层 SSL/TLS,它其实不算在应用层、也不算在传输层,SSL/TLS介于两者之间,TLS的前身是SSL,TLS1.0是基于SSL3.0设计的。后面发现SSL3.0有安全漏洞,谷歌建议禁止SSL3.0,后面火狐和微软也发现了隐患。知道2018年8月,最终通过了TLS1.3(不向后兼容),2020年旧版本TLS1.0和1.1被废弃,目前谷歌和微软等都开始使用更加安全的TLS1.3,到目前为止TLS1.2还是安全可用的,只是发现了有潜在的安全隐患。所以现在能使用的TLS只有1.2和1.3了。
在应用层中,应用TLS协议最多的就是HTTP了(这里的HTTP+TLS就是HTTPS,书上这么写,我还以为HTTP怎么用TLS…),但也并非只有HTTP用了TLS,SMTP也可以使用TLS进行加密鉴别。
这里讲一下TLS在传输层是怎么用的
注:
- SSL译为安全套接字层,套接字层(不算在五层模型中)介于应用层与传输层,所以有人把SSL/TLS归纳为在这里(如果面试问到的话回答这个比较靠谱)。
- 但因为TLS在建立TCP连接之后,就开始执行,所以也有人把SSL/TLS归纳为传输层。
- 但说在应用层我就觉得有点离谱了,我查了很多资料并没有说SSL/TLS在应用层中怎么工作…
这里有两个阶段,即握手协议和会话阶段。在握手阶段,TLS使用其中的握手协议,而在会话阶段,TLS使用其中的记录协议
介绍一下握手阶段
- 在建立TCP连接之后,客户端向服务器发送自己选定的加密算法(以及密钥交换算法)
- 服务器确定自己支持的算法后,然后把自己的CA证书发送给A(注:由于现在TLS1.3并不向后兼容,把以前很多陈旧的加密算法取消了,比如MD5,SHA-1,DES,3DES等,只留下几种最安全的方法)
- 客户端用数字证书中CA的公钥对服务端发送过来的证书进行鉴别验证
- 客户端依据双方确认的密钥交换算法生成主密钥,然后客户端使用公钥对主密钥进行加密,然后把加密后的主密钥发送给服务端。
- 服务端通过自己的私钥把主密钥给解密出来,这样服务端和客户端就有了为后面的数据传输(会话阶段)使用的共同的主密钥。
- 为了使双方的通信更加安全,主密钥会被分割为4个不同的密钥(注意:分割后的密钥依旧是对称密钥)
过程如下图所示:
你可能会迷惑,这些阶段对应着什么?所以接下来我会对这些步骤进行一个简单的概括。
一二三步这个其实没什么好说的,主要是通过CA证书验证服务端是否合法,然后协商后面的加密算法和密钥交换算法(生成主密钥时使用的算法)
在主密钥传输的部分使用的是非对称加密。为什么要使用非对称加密呢?这里主要是为了后面的会话阶段做准备。(如果不了解什么是对称加密和非对称加密的话,我建议还是需要去看一下这两种加密方式的区别)
会话阶段不使用非对称加密,而使用对称加密,主要是效率上的问题(相差3个数量级)。
而对称加密使用公钥对数据进行加密。就有安全问题,如果公钥明文被黑客获取,拿传输的数据就很容易被黑客截获和篡改。
所以在握手阶段,为了解决效率问题和安全问题,就需要通过非对称加密的方式。客户端通过对会话阶段使用的公钥使用自己的公钥进行加密,服务端使用自己的私钥进行解密。通过对主密钥的加密,防止黑客获取主密钥的明文,这样就保证了会话阶段的传输安全。
会话阶段
有点杂,这里就不讲了…后面研究完会补充在这里0v0
参考文章:
- https://zhuanlan.zhihu.com/p/27395037
- 计算机网络(第八版)