1. HTTPS 的原理
- HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
第一步:证书验证
- 客户端向服务器发送 HTTPS 请求,等待服务器确认。
- 服务器将 crt 公钥以证书的形式发送到客户端,该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数。服务器端存放 crt 私钥和 crt 公钥。
- 客户端验证证书是否合法,如果不合法则提示告警。
第二步:获取对称密钥
- 客户端用随机数和 hash 签名生成一串对称密钥(即随机钥,客户钥),然后用 crt 公钥对对称密钥进行加密。
- 客户端将加密后的对称密钥发送给服务器。
- 服务器用 crt 私钥解密,取出对称密钥。
第三步:传输加密数据
- 服务器用随机钥来加密数据,发送加密的网页内容。
- 客户端通过本地存储的随机钥对密文进行解密并判断是否被篡改,如果没有篡改,后面的数据通讯将使用对称加密传输所有内容。
流程图
2. HTTPS 与三次握手
- 三次握手是传输层的概念,HTTPS 通常是 SSL + HTTP 的简称,目前使用的 HTTP/HTTPS 协议是基于 TCP 协议之上的,因此也需要三次握手。要在 TCP 三次握手建立链接之后,才会进行 SSL 握手的过程(即身份认证和密钥协商的过程)。
- TCP 三次握手是确保建立链接,保证双方准备好通信。
- SSL 的目的是加密通信的上层数据。
3. 对称加密与非对称加密
- 对称加密:在编码时使用的密钥 e 和解码时一样 d(即 e = d),我们就将其统称为密钥 k。例如上面提到的对称钥(客户钥)。
- 非对称加密:加密的密钥 e 和解密的密钥 d 是不同的(即 e != d),并且加密的密钥 e 是公开的,叫做公钥,而解密的密钥 d 是保密的,叫私钥。例如上面提到的的 crt 公钥和 crt 私钥。
- HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。因为非对称加密的加解密效率是非常低的,而 HTTP 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。
原文链接:https://qwert.blog.csdn.net/article/details/105509254