Q: 为什么需要证书?

A: 防止“中间人”攻击,确定会话双方的身份

Q: 使用 HTTPS还会被抓包吗?

A: 可以被抓包,只不过抓包后看不到明文,无法篡改

Q: HTTPS的加密过程是怎么样的?

A: 客户端向服务端索要并验证其公钥,用公钥对TLS握手过程中产生的随机数进行加密生成会话密钥,双方采用会话密钥进行加密通信

Q: HTTPS 握手过程中,客户端如何验证证书的合法性

A: 数字证书包括序列号、用途、颁发者、有效时间、公钥,如果只是简单的将这些信息发送给浏览器,中间人可以很轻易的将公钥改成自己的公钥,解决办法就是使用数字签名。将证书的信息生成摘要,将摘要用CA的私钥进行加密,生成数字签名。服务器将数字证书和数字签名一同发送给浏览器,因为有数字签名,所以数字证书无法被中间人修改(修改后的话会导致摘要变了,数字签名实现了不可否认)。浏览器拿到数字证书,根据“证书链”去验证其可信度。

Q: 介绍下 HTTPS 中间人攻击

A: 在传输过程中截获篡改数据。CA证书可以解决中间人攻击的问题

TCP 三次握手和四次挥手

第一次握手:主机 A 发送位码为 syn= 1,随机产生 seq number=1234567 的数据包到服务器,主机 B 由 SYN=1 知道, A 要求建立联机; 第 二 次 握 手 : 主 机 B 收 到 请 求 后 要 确 认 联 机 信 息 , 向 A 发 送 ack number=( 主 机 A 的 seq+1),syn=1,ack=1,随机产生 seq=7654321 的包 第三次握手: 主机 A 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码 ack 是否为 1,若正确, 主机 A 会再发送 ack number=(主机 B 的 seq+1),ack=1,主机 B 收到后确认seq 值与 ack=1 则连接建立成功。

  1. 客户端 – 发送带有 SYN 标志的数据包 – 一次握手 – 服务端

  2. 服务端 – 发送带有 SYN/ACK 标志的数据包 – 二次握手 – 客户端

  3. 客户端 – 发送带有带有 ACK 标志的数据包 – 三次握手 – 服务端

为什么不两次握手? 两次握手的问题在于服务器端不知道SYN的有效性

为什么使用三次握手?