查看原文
其他

HTTPS 的加密过程了解吗?

面试鸭 面试鸭 2024-03-29

大多数大学生对于 408 之一的计算机网络的基础是很薄弱的,要想在面试中脱颖而出,那么基础必须要打好,因此本文来详细分析以下 HTTPS 的加密过程,用图文结合的方式,让你加强记忆。

题目

HTTPS 的加密过程了解吗?

推荐解析

为什么要用 HTTPS ?

安全性

http 是一个简单的请求-响应协议,特点是无状态和明文传输、而https,实际上是 http 加上 SSL / TLS 协议组合形成的一种加密传输协议。如果网站采用 http 协议,因为该协议不加密,极容易遭遇中间人攻击,用户的个人隐私和一些敏感数据很容易泄露。https 则因为 ssl 协议的存在,会对网站与客户端之前传输的数据进行加密,增加中间人破解成本,但是 HTTPS 不是一定安全的。

举个例子:你主动去点击中间人服务器的不安全证书,用户接受了中间人的伪造的证书,那么 CA 就无用了,中间人可以伪造服务端发送的公钥,从而让截取信息。

响应速度

HTTP 的响应速度更快,HTTP 需要三次握手,而 HTTPS 还要加上  SSL / TLS 的握手时间,明显增加了不少。

端口

HTTP 是 80 端口,而 HTTPS 是 443 端口。

HTTPS 的核心 - SSL / TLS 协议

SSL 指安全套接字协议( Secure Sockets Layer ),首次发布与 1996 年。经过漏洞修复、版本更新,SSL 从 3.0 版本才算正式发布,前两个版本漏洞过多,SSL 3.0 升级后变成 TLS 1.0,通常把 HTTPS 中的核心加密协议混称为 SSL/TLS。

SSL / TLS 的工作原理

SSL/TLS 的核心要素是非对称加密。非对称加密采用两个密钥,一个公钥,一个私钥。

公钥:加密、认证。

私钥:解密,签名。

非对称加密小总结:

1)适合在不可信的环境中安全通信,数据传输。

2)算法复杂,安全性相对于对称加密更高。

3)由于加密速度较慢,不适合大数据量加密和解密,因此后文的 HTTPS 一次非对称加密和多次对称加密的原因由此而来。

常见的非对称加密算法:

1)RSA

使用场景:简单易用,用于数据加密和数字签名,应用最广泛的非对称加密算法。

缺点:运算速度慢,不适合大数据量加密

建议用 2048 位或以上的密钥长度,否则破解可能性较大。

2)DSA

使用场景:适合生成数字证书

优点:数字签名速度生成快

缺点:不能应该能有数据加密,而且签名过程需要随机数的保证。

3)ECC

常见的对称加密算法:

1)DES

使用 64 位的密钥(有效密钥为 56 位,8 位奇偶校验位)和 64 位的明文进行加密,安全性不够,在短时间内即可被破解。

2)3DES

向 AES 过渡的加密算法,采用加密->解密->加密的方法,当三个密钥均相同,即可实现一次加密,目的是为了兼容 DES,安全性提升,但处理速度不高,因此有了后面的 AES。

3)AES

全称:Advanced Encryption Standard 先进的对称加密算法。使用 128 位、192 位、256 位的密钥对数据进行加密或解密,安全性更高。AES 在速度上比 3DES 快,安全性也领先 3DES。

HTTPS 的加密过程(重点)

1)Client Hello:信息包括:TLS 版本,加密套件,Client 随机数

2)Server Hello:收到 Client Hello,告知 Client 确认 TLS 版本,加密套件,随机数的信息(可以理解为 ACK 模式),然后将自己的 Server 随机数发给 Client,接着发送自己的证书给 Client,证书发送了,而证书里面有公钥,因此公钥也被携带给了 Client。

3)Client 收到证书后,去对照自己的证书信任列表来确认服务器是否可信,并生成一个随机字符串(称为预主密钥),并用收到公钥将其进行加密,将加密后的预主密钥发送给服务器。

4)Server 收到预主密钥后,用自己的私钥(跟公钥是一对,当时和证书一起发送给了客户端,私钥服务端自己留着用于解密)解密预主密钥,获取真正的预主密钥。

5)Client 和 Server 双方使用相同的算法进行通信,双方此时都获得了 Client 随机数、Server 随机数、预主密钥,生成相同的密钥 Key 用于后面通信的对称加密。

6)Client 发送 Finished 消息

7)Server 发送 Finshed 消息

8)成功建立安全连接,使用共同的 Key 对称加密进行通信。

总结:1 次非对称加密,多次对称加密用来通信,正好符合两种算法的使用场景。

举个例子:看浏览器左上的小锁,点连接安全。

详细流程图展示:

其他补充

鱼聪明 AI 的回答:

鱼聪明 AI 地址:https://www.yucongming.com/

1)客户端发起 HTTPS 请求:客户端(一般是浏览器)向服务器发起 HTTPS 请求,请求中包含一个随机数(ClientRandom),该随机数用于后续生成对称加密密钥。

2)服务器发送证书:服务器收到请求后,会向客户端发送自己的数字证书。证书中包含服务器的公钥,并由可信的证书颁发机构(CA)签名,用于验证证书的真实性。

3)客户端验证证书:客户端收到服务器的证书后,会验证证书的有效性。验证包括检查证书是否过期、是否被吊销、是否由受信任的 CA 签名等。

4)客户端生成随机数:客户端生成一个随机数(PreMasterSecret),该随机数用于生成对称加密的会话密钥。

5)客户端使用服务器公钥加密随机数:客户端使用服务器的公钥对生成的随机数进行加密,然后发送给服务器。

6)服务器使用私钥解密随机数:服务器收到客户端发送的加密随机数后,使用自己的私钥进行解密,得到生成的随机数。

7)客户端和服务器生成会话密钥:客户端和服务器使用各自生成的随机数以及 ClientRandom 和 ServerRandom(服务器发送给客户端的另一个随机数)等信息,通过一定的算法生成对称加密的会话密钥。

8)客户端和服务器开始加密通信:客户端和服务器使用会话密钥进行对称加密,保证通信过程中传输的数据的机密性和完整性。

知乎回答:

1)https 虽然提供了消息安全传输的通道,但是每次消息的加解密十分耗时,消息系统资源。所以,除非在一些对安全性比较高的场景下,比如银行系统,购物系统中我们必须要使用 https 进行通信,其他一些对安全性要求不高的场景,我们其实没必要使用 https。

2)使用 https 需要使用到数字证书,但是一般权威机构颁发的数字证书都是收费的,而且价格也是不菲的,所以对于一些个人网站特别是学生来讲,如果对安全性要求不高,也没必要使用 https。

图解《HTTP》:

推荐文章

小林 coding:https://xiaolincoding.com/network/2_http/https_rsa.html#tls-

欢迎交流

在阅读本文之后,你应该对 HTTPS 加密过程以及,一些前置知识,像为什么要用 HTTPS,HTTPS 的核心 SSL/ TLS 协议,加密算法使用场景和常见的加密算法,接下来我提出三个问题,欢迎小伙伴在评论区分享自己的见解,一起进步!

1)HTTPS 加密一定安全吗?

2)项目中如何去使用 HTTPS 请求,SSL 证书可以免费申请吗?

3)HTTPS 全都是用对称加密算法吗?

往期推荐

什么样的字段适合加索引?索引失效了解吗?

TCP 的三次握手和四次挥手

TCP 和 UDP 的区别是什么?

什么样的字段适合加索引?索引失效了解吗?

什么是 MySQL 回表?

为什么 String 要设计成 Final 类?

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存