HTTPS的原理
HTTP是一个不安全的网络协议
HTTP是在TCP的上层协议。
HTTPS 是在 HTTP 的基础上,利用 SSL/TLS 加密数据包。
HTTPS解决了两个问题:数据加密和验证服务器身份。
SSL:(Secure Socket Layer,安全套接字层),SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
可以理解 TLS 是 SSL的迭代版本。
HTTPS的数据加密
和HTTPS相关的加密方式分为:对称加密、非对称加密。
| 加密方式 | 优点 | 缺点 |
|---|---|---|
| 对称加密 | 速度快 | 加密是不安全的,密钥可能被拦截 |
| 非对称加密 | 安全性高 | 1.加解密速度慢-数据传输效率降低 2.公钥对外公开 如果密文是私钥加密 那么任何人都能用公钥解密 |
HTTPS采用了混合加密的技术
一方面,第一阶段的非对称加密 保证了对称密钥的安全性
另一方面,第二阶段的对称加密 可以提高加密/解密处理的速度,提高数据传输的效率
对称加密
加密方 和 解密方 使用同一个密钥去加密和解密数据
加密过程如下:明文 + 加密算法 + 私钥 => 密文
解密过程如下:密文 + 解密算法 + 私钥 => 明文
非对称加密
非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
被公钥加密过的密文只能被私钥解密,过程如下:
明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
HTTPS的混合加密
客户端生成会话密钥
客户端使用服务器的公钥对会话密钥加密
服务器收到加密后的会话密钥,使用自己的公钥进行解密出会话密钥
客户端和服务器都知道了会话密钥就可以使用对称加密进行传输数据了。
第三方认证机构 CA(Certificate Authority)
虽然使用了混合加密,但仍然无法保证数据传输的安全。因为攻击者可以篡改数据,可以篡改服务器公钥。 为了保证发送数据的安全,客户端和服务器都和第三方认证机构关联。
客户端和服务通信时,服务器先把自己的
数字证书发给客户端客户端拿到证书去CA机构校验证书的合法性
证书校验合法客户端和服务器才启动混合加密流程。
整体流程如下
sequenceDiagram
客户端->> 服务器: https://juejin.cn/xxxxx
服务器-->>客户端: 返回公钥证书
客户端-->>客户端: 校验证书
客户端-->>服务器: 发送公钥加密会话密钥后的密文
服务器-->>服务器: 用自己的私钥进行解密出会话密钥
服务器-->>客户端: 会话密钥+明文内容=>加密报文
客户端-->>客户端: 解密数据
客户端-->>服务器: 会话密钥+明文=> 加密报文