在安全HTTPS中提及到的密钥协商(安全通讯前的准备工作)中,包含了身份认证和密钥协商2大过程如下,其中SSL协议包含记录协议和握手协议,在握手协议中协商通讯传输的的对称加密密码、压缩算法、加密算法等,具体的步骤如下:

Step1

s客户端往服务器端发ClientHello消息

消息特点:该消息是客户端连接服务器端时发送的第一个消息。

消息构成:

(1). 使用的TLS协议版本。

(2). 随机数;用于计算对称加密时的“主密码”。

(3). 会话ID;重连时有用,可为空。

(4). 加密算法列表;客户端支持的加密算法列表,并按照客户端的偏好从前往后排。

(5). 压缩算法列表;客户端支持的压缩算法列表,并按照客户端的偏好从前往后排。

(6). 扩展信息。

消息作用:用于发起会话、交换随机数、协商加密算法、压缩算法等。

Step2

服务器端验证ClientHello消息,主要验证:

(1) 消息格式是否合法;

(2) 能否至少支持客户端所列举的一个加密算法和一个压缩算法等。

验证不通过则发送消息断开会话,验证通过则执行下一步。

Step3

服务器往客户端发送ServerHello消息。

消息特点:该消息是服务器收到ClientHello后返回给客户端的第一个消息。

消息构成:

(1). 使用的TLS协议版本。

(2). 随机数;用于计算对称加密时的“主密码”(这个随机数是服务器发送给客户端的,跟第一步骤的随机数不同,第一个是客户端发送给服务的)

(3). 一个加密算法;服务器从客户端的加密算法列表中选中的一个加密算法。

(4). 一个压缩算法;服务器从客户端的压缩算法列表中选中的一个压缩算法。

(5). 会话ID;新建的唯一的会话ID。

(6). 扩展信息。

消息作用:用于交换随机数、确定加密算法、压缩算法等。

Step4

服务器往客户端发送Certificate消息。

消息特点:该消息必须在ServerHello发送完后立即发送。如果是匿名协商,则无须发该消息。

消息构成:

(1). 证书列表;服务器的证书必须为证书列表的第一个,其后为签发服务器证书的证书,依次类推,最后一个证书为根证书签署的证书。根证书不在证书列表中,它是通过其他途径给到客户端的。(好多时候是浏览器预装好的)

消息作用:发送服务器证书,或者证书链。

Step5

服务器往客户端发送ServerKeyExchange消息。

消息特点:

(1). 该消息必须在Certificate发送完后立即发送(如果是匿名协商,则该消息紧跟在ServerHello后)。

(2). 该消息只有当Certificate消息无法提供足够信息让客户端完成“预主密码”交换时才需要。

消息构成:

(1). 密钥交换算法

消息作用:该消息用于发送密钥交换算法给客户端。客户端可利用这些算法和服务器端完成“预主密码”的交换。

Step6

服务器往客户端发送CertificateRequest消息。

消息特点:

(1). 非匿名的服务器可通过该消息来要求客户端发送证书验证其身份。

(2). 如果发送该消息则该消息在ServerKeyExchange发送完后立即发送(如果该次交互不发送ServerKeyExchange,则该消息紧跟Certificate消息)

消息构成:

(1). 证书类型列表;客户端的证书类型必须是证书类型列表中一种。

(2). 签名和哈希算法列表;列举服务器所支持的签名算法和哈希算法。

(3). CA名字列表;服务器只接受的列表中所列出的CA所发行的证书,其他证书无法验证。

消息作用:请求客户端发送证书验证其身份。(只有双向认证才需要,即服务器也需要认证客户端)

Step7

服务器往客户端发送ServerHelloDone消息。

消息特点:

消息构成:

(1). 无消息内容。

消息作用:该消息用来告诉客户端ServerHello以及附属消息都已发送完毕。发完该消息后服务器等待客户端消息。

Step8

客户端往服务器端发送ClientCertificate消息。

消息特点:

(1). 该消息仅当收到服务器CertificateRequest时才发送,即服务器要求验证客户端。

(2). 如果发送该消息,则该消息必须是客户端收到ServerHelloDone消息后发往服务器的第一个消息。

消息构成:

(1). 证书列表。

消息作用:发送客户端证书让服务器认证。(只有双向认证才需要,即服务器也需要认证客户端)

Step9

客户端往服务器端发送ClientKeyExchange消息。

消息特点:

(1). 如果有ClientCertificate消息,则该消息必须紧跟其后发送;如果无ClientCertificate消息,则该消息是收到ServerHelloDone消息后发往服务器的第一个消息。

(2). 消息用RSA算法或者 Diffie-Hellman参数来协商预主密码。

(3). 采用RAS加密的协商预主密码时,先生成一个长的随机数,由该随机数和客户端的TSL版本号构成一个结构体,用服务器证书的公钥(从服务器证书获得)对结构体进行加密,并把加密后的数据发给服务器。

(4). Diffie-Hellman参数协商比较复杂,暂不讨论。

消息构成:因加密算法而异。

消息作用:协商预主密码

Step10

客户端往服务器端发送CertificateVerify消息。

消息特点:

(1). 该消息只有当客户端证书有签名能力时(Tenfy:即有客户端证书,且证书是公钥和私钥都有的)发送,其它情况不发送(不含固定Diffie-Hellman参数的证书都有签名能力)。

(2). 该消息必须在ClientKeyExchange发送完后立即发送。

(3). 该消息采用客户端证书中的私钥信息进行加密。

消息构成:

(1). 把该消息之前的所有消息作为参数,用私钥对其进行签名得出一份数据,该数据即为消息体。

消息作用:通过签名方式,验证客户端身份。

Step 11

服务器用服务器私钥解密ClientKeyExchange消息得 “预主密码”。服务器和客户端用相同的算法计算“主密码”。主密码计算是根据预主密码、ClientHello中的随机数、ServerHello中的随机数得到的。计算好主密码后双方各向对方发送一个ChangeCipherSpec消息:

消息特点:

(1). 该消息必须在所有握手消息发送完之后,在Finished消息发送之前发送。

(2). 该消息必须在接收完所有握手消息之后,在接收Finished消息之前收到。

消息构成:

(1). 确认消息。

消息作用:确认采用刚才协商好的压缩算法、加密算法、主密码等来传输后继数据。

Step12

任意一方收到ChangeCipherSpec消息后告诉自己的Record Layer由读等待状态转为读状态,并采用新方式来传递数据。并往另外一端往发送Finished消息。

消息特点:

(1). 该消息是收到ChangeCipherSpec后立即发送的。

(2). 该消息是首次采用刚才协商好的压缩算法、加密算法、主密码等来传输的数据。

消息构成:

(1). 把前面大部分的握手消息作为参数,用相同的算法计算得到的一个值。

消息作用:完成压缩算法、加密算法等的协商,开始转入应用层数据传输。

Step13

双方验证收到的消息,验证通过则开始应用层数据传输,否则断开。

通讯过程中必须严格按上述说明来发送和接收消息。接收方接收消息后一旦发现:(1)消息遗漏,(2) 消息次序不对,(3) 消息格式(如加密格式)有误,(4) 消息内容有误,(5) 自身致命错误等,接收方立即通过Alert Protocol往发送方发送ErrorAlert消息,告诉对方终止此次会话。如果是能容忍的错误,则不发任何消息,以免对方主动断开会话。

若干重要验证说明客户端验证服务器的Certificate消息。主要验证内容为:

(1). 服务器证书使用日期是否有效。

(2). 发行服务器证书的CA是否可靠。

(3). 发行者的公钥能否解开服务器证书上的“发行者数字签名”。

(4). 服务器证书上的名称(如域名)是否和服务器实际名称匹配等(PHP中可以选择是否验证该选项)。

(Tenfy: 这里可以看出,客户端验证服务的时候,只需要验证对应服务器证书的有效性即可,无需验证对应服务器是否拥有跟该证书一致的私钥)

服务器验证客户端的CertificateVerify消息。主要验证内容为:

(1). 用客户端公钥能否解开客户端私钥加密的消息。

(Tenfy:服务器验证客户端时候,还需要验证是否拥有跟证书对应的私钥)

服务器验证客户端的ClientCertificate消息。主要验证内容为:

(1). 客户的证书使用日期是否有效。

(2). 为客户提供证书的CA 是否可靠。

(3). 发行CA 的公钥能否正确解开客户证书的发行CA的数字签名。

(4). 检查客户的证书是否在证书废止列表(CRL)中。

在服务器密钥交换握手信息,TLS的握手流程-密钥协商与身份认证过程 | 程序小兵...相关推荐

  1. HTTPS协议详解:TLS/SSL握手过程

    1.握手与密钥协商过程 基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程 再看一张手绘时序图 (1).client_hello 在发送的 Client Hello 中会带上自 ...

  2. HTTPS TLS/SSL握手过程

    一.握手与密钥协商过程 基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程. 1.client_hello 客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表, ...

  3. jssdk信息验证失败_阿里云环境中TLS/SSL握手失败的场景分析

    TLS/SSL握手是一个相对复杂的过程,在阿里云环境中结合产品,安全等特性,可能会让TLS/SSL握手过程的不定性更多.本文来总结下各种握手失败的场景. 一次TLS/SSL握手的过程 本文不详细介绍T ...

  4. TLS/SSL握手过程

    参考了:https://www.wosign.com/faq/faq2016-0309-04.htm 1.握手与密钥协商过程 基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程 ...

  5. 阿里云环境中TLS/SSL握手失败的场景分析

    TLS/SSL握手是一个相对复杂的过程,在阿里云环境中结合产品,安全等特性,可能会让TLS/SSL握手过程的不定性更多.本文来总结下各种握手失败的场景. 一次TLS/SSL握手的过程 本文不详细介绍T ...

  6. SSL/TLS(4): TLS连接握手过程详细分析

    SSL/TLS(1):基本概念通俗解释 SSL/TLS (2):通俗解释SSL/TLS为什么安全 SSL/TLS(3): CA证书解释 前言 在前面的文章中,我们讲述了SSL/TLS相关概念和CA证书 ...

  7. HTTPS 和 SSL/TLS 协议:密钥交换(密钥协商)算法及其原理

    转自:https://blog.csdn.net/andylau00j/article/details/54583769 本系列的前一篇,咱们聊了"密钥交换的难点"以及" ...

  8. 扫盲 HTTPS 和 SSL/TLS 协议[3]:密钥交换(密钥协商)算法及其原理

    文章目录 ★密钥交换/协商机制要达到啥目的? ★密钥交换/协商机制的几种类型 ★基于 RSA 的密钥协商 ★基于 DH 的密钥协商 ★DH 的变种 ★基于 PSK 的密钥协商 ★基于 SRP 的密钥协 ...

  9. 计算机网络基础必备(三次握手,四次握手,以及HTTP协议相关)

    目录 一.计算机网络 通信协议 网络模型 二.TCP/IP TCP/IP 与 HTTP TCP 与 UDP TCP连接的建立与终止 TCP报文首部 TCP 三次握手 TCP 四次挥手 四个计时器 保持 ...

最新文章

  1. Java项目:仿小米商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  2. 区块链学习路线及资料索引
  3. linux备忘录-vi和vim
  4. Acwing第 32 场周赛【完结】
  5. JVM虚拟机总结 内存分析及调试
  6. C++的黑科技之进制转换
  7. 提高性能:流的非阻塞处理
  8. flatform installer web 安装php_安装PHP扩展
  9. YFI创始人旗下多链跨链平台multichain.xyz即将投入使用
  10. 单词字符的one-hot编码
  11. SCSS和Sass有什么区别?
  12. 面试题:怎么以最快速度计算8*4:
  13. DISCUZ编辑器工具栏图标不显示
  14. H.265与H.264对比有哪些优势
  15. DISCUZ代码分析
  16. win10 运行debussy不能打开波形窗口问题
  17. PHP实现 记录网站访问量
  18. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程03:碰撞检测》
  19. list.isEmpty() CollectionUtils.isEmpty(list)区别?
  20. html中repeat的作用,repeat-y

热门文章

  1. 微服务化解决文库下载业务问题实践
  2. Proteus仿真时出现Cannot open‘***\LISA5476.SDF’的错误!
  3. 远程桌面使用linux,在Windows 系统下使用远程桌面连接Linux 系统主机的方法
  4. 拼手气红包java_JAVA实现拼手气红包算法
  5. 网站搭建(简洁版本)
  6. 通过PubSubHubbub实现YouTube订阅功能
  7. 技术宅男徐明星“回归”
  8. 单片机延时程序的实现
  9. 计算机英语的作文,计算机英语作文
  10. 数据指标 | 网站数据分析体系