1. client--->server:Client hello

Version: TLS 1.2:客户端使用的 TLS 版本号。

Session ID:会话 ID,首次连接时该字段为空,即 Session ID Length 为 0。表示客户端告诉服务器是新的会话,没有其他会话要恢复。在后续的连接中,这个字段可以保存会话的唯一标识。服务器可以借助会话ID在自己的缓存中找到对应的会话状态。在会话恢复过程中会用到该字段,此时 Session ID 不为 0

Random:随机数,用于生成通信过程中的对称秘钥。前 4 个字节为 GMT Unix 时间信息,增强随机性。

Cipher Suite:客户端支持的加密套件列表。一个加密套件是一个四件套,包含四个功能:密钥交换算法、身份认证算法 、对称加密算法和信息摘要算法。

Compression:客户端支持的压缩算法。如果为null,表示没有使用压缩算法。

Extensions:扩展。可包含多个该字段。

2. server--->client:Server hello

Version:确定通信使用的 SSL 版本号。

Random:随机数,用于生成通信过程中的对称秘钥。

Cipher Suite:选择使用的加密套件。服务器从 Client HelloCipher Suite 中选择一个密码套件。如果没有可选择的,即服务器不支持客户端的加密套件,那么服务器返回握手故障并且断开连接。

Session ID:如果 Client Hello 中的该字段不为 0,那么服务器就在以前缓存的会话中查找该会话,找到后就恢复会话。如果 Client Hello 中的该字段为 0,那么服务器就重新建立一个会话,并把该字段赋值。

3. server--->client:Certificate

服务端证书(server.crt)。客户端用此证书验证服务端是否合法。

4. server--->client:Server Key Exchange

该帧只存在于秘钥交换算法(Key Exchange)为 DH 或 ECDH 的帧中。如果秘钥交换算法为 RSA,那么此帧不存在

5. server--->client:Certificate Request

该帧存在于双向验证过程中,用于请求客户端证书。

6. server--->client:Server Hello Done

通知客户端 Server Hello 相关的信息已经发送完成。

7. client--->server:Client Key Exchange

RSA Key Exchange

  1. 客户端产生预主秘钥(pre-master secret),使用从服务器证书中得到的公钥(public key)加密预主秘钥后发往服务器;
  2. 服务器收到加密后的预主秘钥后,使用其私钥将其解密。
  3. 此时,客户端和服务器都有客户端随机数,服务器随机数,预主秘钥。双方使用这三者产生通信过程中的主秘钥(master secret);
  4. 双方互相发送 Change Cipher SpecEncrypted Handshake Message

DH(ECDH)Key Exchange

  1. 服务器使用其私钥将客户端随机数,服务器随机数,服务器 DH(ECDH)参数签名,生成服务器签名,发向客户端(Server Key Exchange);
  2. 客户端使用服务器发送过来的公钥和签名得到服务器 DH 参数;
  3. 客户端向服务器发送 DH 参数(Client Key Exchange);
  4. 双方使用客户端 DH 参数,服务器 DH 参数生成预主秘钥。然后使用客户端随机数,服务器随机数,预主秘钥产生主秘钥;
  5. 双方互相发送 Change Cipher SpecEncrypted Handshake Message

8. client--->server:Certificate Verify

该帧存在于双向验证过程中,用于客户端自证该证书属于客户端。

9. client--->server:Change Cipher Spec

客户端告知服务器,客户端已经生成了主秘钥,并且后续的通信将使用该秘钥进行加密。

10. client--->server:Encrypted Handshake Message

这是客户端使用主秘钥加密的第一个数据,发向服务器。服务器使用此消息验证自身生成的主秘钥的正确性。

11. server--->client:Change Cipher Spec

服务器告知客户端,服务器已经生成了主秘钥,并且后续的通信将使用该秘钥进行加密。

12. server--->client:Encrypted Handshake Message

这是服务器使用主秘钥加密的第一个数据,发向客户端。客户端使用此消息验证自身生成的主秘钥的正确性。

参考

https://www.acunetix.com/blog/articles/establishing-tls-ssl-connection-part-5/

https://www.linuxbabe.com/security/ssltls-handshake-process-explained-with-wireshark-screenshot

https://razeencheng.com/post/ssl-handshake-detail.html

https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/

https://www.cloudflare.com/learning/ssl/keyless-ssl/

https://blog.csdn.net/mrpre/column/info/17425/1

客户端和服务器不支持一般 ssl 协议版本或加密套件。_SSL:握手过程详解相关推荐

  1. 谷歌浏览器提示客户端和服务器不支持一般 SSL 协议版本或加密套件(亲测有效)

    目录 一.定位问题 二.升级TLS1.2 1.原理 之前架构 调整架构 2.配置nginx 3.配置tomcat 三.访问nginx即可 最近访问一部分网站时,出现如下图所示 " 此网站无法 ...

  2. 此网站无法提供安全连接(客户端和服务器不支持一般 SSL 协议版本或加密套件。)

    最近访问一部分网站时,出现如下图所示 " 此网站无法提供案例连接,客户端和服务器不支持一般 SSL 协议版本或加密套件 " 的问 题. 注意这里显示了非常关键的一句话,xxx使用了 ...

  3. 客户端和服务器不支持一般 ssl 协议版本或加密套件。_恶意软件加密通信概要分析...

    作者:Jo@北京观成科技 恶意加密流量是当前流量安全检测的痛点和难点.在未解密的情况下如何检测恶意加密流量,机器学习可提供颇为有效的解决方案.传统机器学习依赖于训练数据集和特征工程,而搜集的各类恶意加 ...

  4. edge 错误 客户端和服务器不支持常用的 SSL 协议版本或密码套件

    不支持的协议 客户端和服务器不支持常用的 SSL 协议版本或密码套件. 解决方案: 此文章质量较低,不会获得较多流量扶持! 可能的原因为:篇幅太短,广告涉嫌违规,外链过多,缺少代码,图片涉嫌违规.此文 ...

  5. 客户端和服务器不支持常用的SSL协议版本或密码套件

    如果是是连接了校园网网线c中出现了这种问题(客户端和服务器不支持常用的SSL协议版本或密码套件),我是这么解决的: 然后浏览器就会自动跳转到校园网认证界面,输入账号密码.OK,问题解决!

  6. HTTPS篇之SSL握手过程详解

    由于最近接触到的一个项目数据有些敏感,所以需要通过加密算法保证数据的安全性.由于公司之前有一套自定义传输协议并且有配套的公共代码导致客户端人员不太愿意使用 WWS 协议.且之前的协议没有协议层的数据加 ...

  7. 带你轻松认识SSL协议中的加密套件

    什么是加密套件 加密套件(CipherList)是指在ssl通信中,服务器和客户端所使用的加密算法的组合.在ssl握手初期,客户端将自身支持的加密套件列表发送给服务器:在握手阶段,服务器根据自己的配置 ...

  8. TLS/SSL 工作原理及握手过程详解

    目录 前言 TLS/SSL 基础概念 密钥协商过程中存在的问题及解决办法 TLS/SSL 握手过程 前言 本文是对 HTTPS 安全基础.TLS/SSL 工作原理及握手过程的总结.第一部分介绍为 HT ...

  9. TCP协议:三次握手过程详解

    本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 上图主要包括三部分:建立连接.传输数 ...

最新文章

  1. python爬虫如何连接数据库_手把手教你如何在Navicat中如何新建连接数据库及相关报错解决方法...
  2. 【Scrum】2010.12.27
  3. linux配置服务器心得体会,linux 学习 linux上搭建dhcp服务器
  4. LeetCode-38 报数
  5. Jenkins自动化CI CD流水线之8--流水线自动化发布Java项目
  6. 剑指 Offer 32 . 从上到下打印二叉树
  7. UIButton的几种触发方式
  8. 关于larbin的编译
  9. 浅谈对JAVA堆栈的理解
  10. 可以将pdf转换成jpg图片格式的方法
  11. 2019年8月8日 星期四 今日计划
  12. Serialization和Deserialization
  13. iOS中都有什么设计模式?各个设计模式的作用?
  14. 豆瓣超高评分《扫黑风暴》热评爬取可视化展示
  15. jiaba库之关键词提取(增量更新自定义语料)
  16. 关于企业软件资质申请流程以及时间规划(一)——软件著作权申请
  17. 2018上半年软件设计师上午试题参考答案
  18. SEO人员,怎么将网站关键词排进SERP前十名?
  19. python之季节调整(调用x12a和x13as)
  20. Kindle PaperWhite 3

热门文章

  1. 前端开发常用技术工具网址导航汇总
  2. C# Sharepoint 读取和更新
  3. 连接DB2报错:ERRORCODE=-4499, SQLSTATE=08004
  4. 基于改进YOLOv5的猕猴桃叶病害检测系统(完整源码&数据集&视频教程)
  5. vue 上传视频到腾讯云存储并获取视频第一帧
  6. 应用文书信小作文各种信件整理模板(建议、介绍/推荐、邀请、通知告示、纪要)
  7. Mac下Chrome快捷键大全
  8. Delphi D10.X 并行库PPL编程之 TParallel.For
  9. acrobat adobe合并多个PDF发票文件后,电子公章丢失
  10. # 2021-01-14 #「VNC」- 在登录后,显示当前桌面(而不是登录新桌面)