4

测试背景

抓包工具:Wireshark

本机ip:10.129.135.155

目标网站:https://segmentfault.com/

握手过程

w14

抓包截图

w15

一目了然,No33,44,45,是TCP的三次握手,除此之外,建立TLS/SSL连接,也需要先建立握手

1. Client Hello

w16

主要向服务端传递的信息

  • Version:客户端支持的版本
  • Random:客户端生成的随机数
  • Cipher Suites:客户端支持的密码套件
  • Compression Methods:客户端支持的压缩方法

2. Server Hello

w17

主要向客户端传递选择的版本,密码套件和压缩方法,以及服务端生成的随机数

每个密码套件的名称定义一个密钥交换算法、一个批量加密算法、一个消息认证码(MAC)算法,以及一个伪随机函数(PRF)

在上面的例子中,

  • 密钥交换算法:ECDHE_RSA
  • 批量加密算法:AES_128_GCM
  • 消息认证算法:SHA256
  • 伪随机函数:TLS 1.2的伪随机函数使用MAC算法的散列函数来创建一个主密钥——连接双方共享的一个48字节的私钥

3. Certificate

w18

服务端向客户端发送证书,

4. Server Key Exchange

w19

服务端向客户端发送密钥交换的额外数据

5. Server Hello Done

w20

服务端告诉客户端消息发送完毕

6. Client Key Exchange

w21

客户端传递交换密钥所需要的信息

7. Encrypted Handshake Message

w22

客户端的发送的消息已被加密

8. New Session Ticket

w23

9. Encrypted Handshake Message

w24

服务端发送的消息已被加密

密码规格变更协议,Change Cipher Spec Protocol

w25

客户端和服务端会先后向对方发送Change Cipher Spec Message,告之对方要切换密码

HTTPS

解决的是

  1. 机密性的问题
  2. 完整性的问题
  3. 认证的问题

要确保机密性,可以使用对称密码。

由于对称密码的密钥不能被攻击者预测,因此我们使用伪随机数生成器来生成密钥。

若要将对称密码的密钥发送给通信对象,可以使用公钥密码或者Diffie-Hellman密钥交换。

要识别篡改,对数据进行认证,可以使用消息认证码。消息认证码是使用单向散列函数来实现。

要对通信对象进行认证,可以使用对公钥加上数字签名所生成的证书

相关问题

如何保证公钥不被篡改?

将公钥放在数字证书中,只要证书可信,公钥就可信

公钥加密计算量太大,如何减少耗用时间?

每一次对话(session),客户端和服务端都生成一个“对话密钥”,用它来加密信息。由于“对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密“对话密钥”本身,这样就减少了加密运算的消耗时间

简述SSL/TLS协议的基本过程

  1. 客户端向服务端索要并验证公钥
  2. 双方协商生成“对话密钥”
  3. 对方采用“对话密钥”进行加密通信

SSL/TLS协议中第三次握手,客户端的回应

  1. 一个随机数,该随机数用服务器公钥加密
  2. 密码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
  3. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是发送前面所有内容的hash值,用来供服务器校验

SSL/TLS协议中的第四次握手,服务端的最后回应

  1. 密码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
  2. 服务端握手结束通知,表示服务端的握手阶段已经结束。这一项同时也是发送前面所有内容的hash值,用来供客户端校验

三个随机数

w26

w27

会话密钥是通过三个随机数生成的,是对称密码的密钥,也是非对称密码的明文

消息认证码

消息认证码,Message authentication code,MAC,是一种确认完整性并进行认证的技术

消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值

消息认证码是一种与密钥相关联的单向散列函数

消息认证码的局限在于无法防止否认,服务端也有密钥,可以生成MAC

w28

数字签名

公钥密码包括一个有公钥和私钥组成的密钥对,其中公钥用于加密,私钥用于解密

数字签名的过程中,用私钥加密来生成签名,用公钥解密来验证签名

w29

w31

w31

证书

为公钥加上数字签名

公钥证书,Public-Key Certificate,PKC

认证机构,Certification Authority,CA,能够认定公钥确实属于此人

证书一般包括,签名对象的信息包括公钥,数字签名的算法,数字签名

w32

公钥基础设施,PKI

Public-Key Infrastructure,是为了能够有效地运用公钥而制定的一系列规范的总和

参考资料


nbb3210
436 声望31 粉丝

优雅地使用JavaScript解决问题