2 TLS-v1.2与SSL-v3.1

TLSv1.2介绍及Https协议SSL建立过程分析(OpenSSL源码)

SSL3.1就是TLS1.0

2.1 TLSv1.2协议

3个作用:

  1. 身份认证:通过证书认证来确认对方的身份,防止中间人攻击
  2. 数据私密性:使用对称性密钥加密传输的数据,由于密钥只有客户端/服务端有,其他人无法窥探。
  3. 数据完整性:使用摘要算法对报文进行计算,收到消息后校验该值防止数据被篡改或丢失。

2.1.1 TLS传输过程

使用wireshark抓包的结果:

其中1-4是握手阶段,5是指握手后双方使用商议好的秘钥进行通讯。

2中并列着Server Hello,Certificate等多个类型,是因为这是一个Multiple Handshake Messages,一次性发送多个握手协议包,如下图所示:

2.1.2 传输过程总体描述

(1)客户端提供【客户端随机数、可选算法套件、sessionId】等信息 (2)服务端提供【服务端随机数、选用算法套件、sessionId】等信息 (3)服务端提供证书 (4)服务端与客户端互换算法需要的参数 (5)客户端根据前面提到的随机数和参数生成master secret,确认开始使用指定算法加密,并将握手信息加密传输给服务端,用来校验握手信息、秘钥是否正确 (6)服务端进行与(5)一样的操作 (7)客户端、服务端可以用master secret进行加密通讯

2.1.3 传输中的一些参数

cipher suites:算法套件

每个算法套件是一组算法,以TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256为例。 其中

秘钥协商过程

这里涉及到几个参数,client randomserver randompre master keymaster key,其中master key是最终协商出来的秘钥,后续对称加密通讯都是使用master key

(1)master key是使用伪随机算法,结合client randomserver randompre master key三个随机因素生成的。

(2)client randomserver random是客户端和服务端分别生成的随机数,这样增加了随机性。

(3)pre master key也是通过一定规则计算出来的随机数。 我们依旧以TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256为例讲述一下pre master key的生成过程。

① 客户端随机生成随机值Ra,计算Pa = Ra Q(x, y),Q(x, y)为全世界公认的某个椭圆曲线算法的基点。将Pa发送至服务器。 ② 服务器随机生成随机值Rb,计算Pb - Rb Q(x, y)。将Pb发送至客户端。 由于算法的不可逆转性,外界无法通过Pa、Pb推算出Ra、Rb ③ 因为算法保证了Ra Pb= Rb Pa,所以客户端计算S = Ra Pb;服务器计算S = Rb Pa,提取其中的S的x向量作为密钥(pre master key)

TLS握手过程中服务器和客户端互换参数,就是在交换PaPb,交换后服务器和客户端可根据ECDHE算出同一个pre master key

2.1.4 身份验证过程

做两件事情:

  1. 确认服务器发送过来的证书是合法的
  2. 确认服务器拥有私钥

1 验证证书合法性

以csdn网站为例,其证书结构如下:

服务端发送证书给客户端时,需要发送整个证书链(这里没有传输根证书,我认为是因为浏览器自带了根证书,并且信任它)

每个证书包含了一些基本信息证书公钥证书签名。其中证书签名是对证书进行摘要计算,并使用颁发机构的私钥加密生成。

为证实csdn.net证书的合法性,我们需要用GeoTrust RSA CA 2018的公钥对证书签名进行解密,解密后与证书的摘要进行对比,一致证明csdn.net证书是没有问题的。 同样的,我们需要证明GeoTrust RSA CA 2018的合法性,使用DigiCert的公钥。 DigiCert是浏览器信任的根证书,无需校验。

2 验证服务器拥有私钥

如果密钥协商过程使用的是RSA算法,则已经验证了服务器拥有私钥 如果密钥协商过程使用的是ECDHE算法,则没有验证服务器的私钥,此时需要在server key exchange时,对数据进行摘要计算并使用私钥加密,如果客户端可以使用公钥正常解密,则证明服务器拥有私钥。

3 sessionId - 握手重用

在Hello的过程中,有一个sessionId的字段,是用来重用握手信息的。 (1)第一次握手的时候 客户端发送的sessionId为空,服务端会生成sessionId返回给客户端,并将握手信息保存起来。 (2)再次握手的时候 客户端发送【上次的sessionId】,服务端检查到sessionId存在,返回同样的sessionId,然后就可以直接使用上次商定的秘钥进行通讯了。 (3)session过期时 客户端发送【上次的sessionId】,服务端检查到sessionId不存在,则返回新的sessionId,继续正常的握手流程。

2.2 SSL

SSL协议,当前版本为3.1(SSL3.1就是TLS1.0)。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输.它位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

详情可查看:

Copyright © qgao 2021-* all right reserved,powered by Gitbook该文件修订时间: 2022-08-15 18:31:03

results matching ""

    No results matching ""