最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 服务器 > 系统运维 >
ssl/tls握手协议的几个阶段
CSDN发表于 2020-09-25 17:21 次浏览
握手是TLS协议中最精密复杂的部分。在这个过程中,通信双方协商连接参数,并且完成身份验证。根据使用的功能的不同,整个过程通常需要交换6~10条消息。根据配置和支持的协议扩展的不同,交换过程可能有许多变种。

消息格式

类型 长度 内容
1字节 3字节 ≥0字节
类型

表示10种消息中的一种。所有类型如下:

hello_request
client_hello 建立初始的逻辑连接
server_hello 同上
certificate 一系列证书
certificate_request 请求证书
certificate_verify 证书验证
server_key_change 服务器秘钥交换
client_key_change 客户端秘钥交换
server_done 消息结束,等待回复
finished 密码已经变更完成
长度

消息长度(字节)。

内容

阶段1:建立安全功能

由客户端发起,建立初始的逻辑连接,并为后面的阶段交换所需参数。
 

client hello消息内容:

  1. 版本号:客户端支持的最高TLS版本。
  2. 随机数:32位的时间戳 + 客户端生成的28字节的随机数。可以为这次握手防止重放攻击,但不作为后续密钥的参数。
  3. 会话标志:分为0值和非零值。
    0值:客户端想在新会话上建立一个新连接。
    非0值:在原会话上建立一个新连接。
  4. 密码组:按优先级降序排列的密码算法列表。表中每行包括2个元素:密钥交换方法和CipherSpec(密码说明)。
  5. 压缩方法:客户端支持的所有压缩方法的列表。

server hello消息:

  1. 版本号:决定使用的版本号。

  2. 随机数:服务器生成的随机数(也同时生成了时间戳)。

  3. 会话标识:
    若客户端发的是0值:则服务器生成一个新连接,发回新ID。
    若客户端是非0值:则服务器发送同样的数值。

  4. 密码组:决定使用的密码组。

  5. 压缩方法:决定使用的压缩方法。

密码组详情

  1. 交换密钥的方法
    ① RSA 非对称加密
    ② 固定DH
    ③ 瞬时DH
    ④ 匿名DH
  2. cipher spec 密码说明
    ① 密码算法(任何算法,如RC4,DES3,IDEA等)
    ② MAC算法(MD5,SHA-1)
    ③ 密码类型(流 / 块)
    ④ 可否出口(可 / 不可)???
    ⑤ 散列长度(0 / 16(MD5) / 20(SHA-1))
    ⑥ 密钥材料???
    ⑦ IV大小(CBC分组的初始向量大小)

.
.

阶段2:服务器的认证和密钥交换

服务器承接阶段1,继续发送消息,可能发送 对自己身份的认证,密钥参数(哪个密钥?)和请求客户端表明身份等等。

certificate 消息:

  • 内容:一个或一组X.509证书(证明服务器身份,具体查看X.509部分)。
  • 不需要certificate消息:使用匿名DH 。
  • 若是固定DH 会在此消息中附加服务器DH公钥的参数(后面无需再发server key change消息)

server_key_change 消息:

  • 不需要此消息的情况:
    ① 若服务器发送了带有固定DH的参数的certificate消息;
    ② 若使用RSA密钥交换(???)。
    .
  • 必需此消息的情况:
    ① 匿名DH(两个全局DH值 和 服务器DH公钥)。
    ② 瞬时DH(三个DH参数))。
    ③ RSA,且服务器仅用了RSA签名密钥。???

certificate request消息:

  • 内容:证书类型 + 签证机构。
  • 证书类型:表明公钥算法和它对应的用途???
    RSA:仅用于签名
    DSS:仅用于签名
    固定DH的RSA:发送RSA签名证书,其签名仅用于认证。
    固定DH的DSS:仅用于认证。
  • 签证机构:可接受的签证机构列表

server done 消息:

  • 表明服务器hello结束,等待客户端应答。

  • 无参数

.
.

阶段3:客户端的认证和密钥交换

在收到server done后,客户端检验服务器的证书合不合法,再检验server hello的参数能否接受。一切无误之后,开始向服务器发送消息。

certificate 消息:

  • 如果服务器发了certificate request,那么客户端才会回应certificate。
    若不能提供合适的证书,客户端会发一条“无证书警告”。

client key change 消息:

  • 内容 依赖于双方共同决定的密钥交换类型:
    ① RSA:.客户端生成的48字节次密钥,并用服务器certificate中的公钥 / server key change中的临时RSA密钥加密。后面用它生成主密钥。???
    ② 瞬时DH 和 匿名DH:发送客户端DH公钥参数。
    ③ 固定DH:由于certificate消息中已包含DH参数,故此条消息为空。

certificate verify 消息:

  • 提供对客户端证书的精准认证。(只有客户端证书具有签名能力时才会发送)???

.
.

阶段4:完成

change cipher spce 消息(不属于握手协议):

  • 客户端示意 变更密码规范,并从cipher spec中复制,以挂起cipher spec。
  • 于是客户端开始以新的算法和密钥发送消息

client finished 消息:

  • 客户端发送完成消息。

change cipher spce 消息(不属于握手协议):

  • 在收到上面2个消息后,服务器 变更密码规范,也从cipher spec中复制,以挂起cipher spec。
  • 于是服务器开始以新的算法和密钥发送消息

server finished 消息:

  • 服务器发送完成消息。

.

此时 握手完成,客户端和服务器开始交换应用层数据。
 
标签:ssl协议
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐