ClientHello

在一次新的握手流程中,ClientHello消息总是第一条消息。这条消息将客户端的功能和首选项传送给服务器。客户端会在新建连接后,希望重新协商或者响应服务器发起的重新协商请求(由HelloRequest消息指示)时,发送这条消息。

Wireshark 抓取ClientHello消息:

  • Version
    协议版本(protocol version)指示客户端支持的最佳协议版本。从低到高依次 SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2,当前基本不再使用低于 TLSv1 的版本;

  • Random
    随机数(random)字段包含32字节的数据。当然,只有28字节是随机生成的;剩余的4字节包含额外的信息,受客户端时钟的影响。4个字节以Unix时间格式记录了客户端的协调世界时间(UTC)。协调世界时间是从1970年1月1日开始到当前时刻所经历的秒数,那么时间是不断的上涨的,通过前4字节填写时间方式,有效的避免了周期性的出现一样的随机数。使得“随机”更加“随机”。随机数是用来生成对称密钥的。
    在握手时,客户端和服务器都会提供随机数。这种随机性对每次握手都是独一无二的,在身份验证中起着举足轻重的作用。它可以防止重放攻击,并确认初始数据交换的完整性。
  • Session ID
    在第一次连接时,会话ID(session ID)字段是空的,这表示客户端并不希望恢复某个已
    存在的会话。在后续的连接中,这个字段可以保存会话的唯一标识。服务器可以借助会话ID在自己的缓存中找到对应的会话状态。
    如果Session id length有值,对于 SSL 2.0 Session id length 0~16字节,其后的版本扩大到32字节。本报文中Session id length是0,后面就没有跟Session id,直接是Cipher suit length。
    Session id并不一定是32字节,RFC规定可以0~32字节。只是Session id由服务器生成,服务器普遍采用OpenSSL,而OpenSSL基本只生成32字节的session id,如果碰到其他字节长度的Session id,切莫认为是异常client hello。

  • Cipher Suites

密码套件(cipher suite)块是由客户端支持的所有密码套件组成的列表,该列表是按优先级顺序排列的。加密套件列出了客户端能够支持的加密方式、算法等信息。不同的加密套件性能不一样,安全性不一样,也导致了SSL交互报文的不一样。

例如,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 各字段含义:

字段 TLS ECDHE RSA WITH AES_256_GCM SHA384
解释 代表TLS协议 对称加密密钥交换算法 非对称密钥算法,也就是公钥/私钥算法 分割作用 对称加密算法 哈希算法

示例1:
TLS_RSA_WITH_RC4_128_SHA1,它表示,密钥交换使用RSA,身份认证算法用RSA(证书是身份认证一部分,我们还需要用RSA去验证证书),对称加密算法使用RC4,摘要算法使用SHA1。

示例2:
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA1,它表示,密钥交换算法使用ECDHE(短暂椭圆曲线),身份认证算法使用ECDSA,对称加密算法使用AES_128_CBC,摘要算法使用SHA1。

客户端把自己所支持的加密套件全部发送给服务器,服务器会从中选择一个加密套件。每个加密套件用2字节表示。每个加密套件用2字节表示,这里一共30个加密套件,所以理所当然的,Cipher Suits Length是30 * 2 = 60字节。

  • Compression
    客户端可以提交一个或多个支持压缩的方法。默认的压缩方法是null,代表没有压缩。
  • Extensions
    扩展(extension)块由任意数量的扩展组成。这些扩展会携带额外数据。TLS扩展是一种通用目的的扩展机制,使用这种机制可以在不修改协议本身的条件下为TLS协议增加功能。
    例如:Server_name(SNI):

SSL存在验证证书的时候,有这么一个判断:比较“浏览器输入的地址”和“获取的证书的名称”。如果一样,那么接着验证,如果不一样,那么认为证书是不可信的。

[参考文献]

  1. 百度百科 SSL
  2. 《HTTPS 权威指南:在服务器和Web应用上部署SSL/TLS和PKI》
  3. SSL/TLS握手过程 https://www.cnblogs.com/barrywxx/p/8570715.html
  4. TLS/SSL 协议详解 (9) Client hello https://blog.csdn.net/mrpre/article/details/77867439
  5. 例说图解TCP/IP协议族--TLS篇(1)抓包分析SSL/TLS握手 https://blog.csdn.net/Wendy019900107/article/details/90042622

TLS/SSL 协议 - ClientHello的更多相关文章

  1. TLS/SSL 协议 - ServerHello

    ServerHello ServerHello消息的意义是将服务器选择的连接参数传送回客户端.这个消息的结构与ClientHello类似,只是每个字段只包含一个选项. 服务器无需支持客户端支持的最佳版 ...

  2. TLS/SSL 协议 - ServerKeyExchange、ServerHelloDone

    ServerKeyExchange ServerKeyExchange消息的目的是携带密钥交换的额外数据.消息内容对于不同的协商算法套件都会存在差异.在某些场景中,服务器不需要发送任何内容,这意味着在 ...

  3. 深入TLS/SSL协议

    总体 TLS/SSL协议是为了解决网络通讯中的信息安全问题而诞生的. 它的设计目的主要有三个: 身份验证--搞清楚与我通讯的人是不是我所想的那个. 保密性--就算第三方拿到了通讯内容,也搞不清楚其中所 ...

  4. TLS协议工作过程;如何应用TLS/SSL协议为WEB流量提供安全

      SSL/TLS协议的基本过程是这样的: 客户端向服务器端索要并验证公钥. 双方协商生成"对话密钥". 双方采用"对话密钥"进行加密通信.   上面过程的前两 ...

  5. TLS/SSL 协议详解 ssL 、TLS 1.0、TLS 1.1、TLS 1.2的了解

    TLS 1.0 RFC http://www.ietf.org/rfc/rfc2246.txt TLS 1.1 RFC http://www.ietf.org/rfc/rfc4346.txt TLS ...

  6. TLS/SSL 协议 - Server Certificate

    Server Certificate 典型的Certificate消息用于携带服务器X.509证书链.证书链是以ASN.1 DER编码的一系列证书,一个接着一个组合而成.主证书必须第一个发送,中间证书 ...

  7. TLS握手协议分析与理解——某HTTPS请求流量包分析

    https://xz.aliyun.com/t/1039 HTTPS简介 HTTPS,是一种网络安全传输协议,在HTTP的基础上利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护 ...

  8. HTTPS(身披SSL协议的HTTP)

    参考链接: HTTP 与 HTTPS 的区别 HTTPS科普扫盲帖 HTTPS小结 HTTP 和 HTTPS 区别 HTTP是明文传输未加密,安全性差,HTTPS(HTTP + SSL)数据传输是加密 ...

  9. 用TLS/SSL保证EMQ的网络传输安全

    作为基于现代密码学公钥算法的安全协议,TLS/SSL能在计算机通讯网络上保证传输安全,EMQ的MQTT broker支持TLS,也可以用这种方式来确保传输安全. 参考官网:https://www.em ...

随机推荐

  1. 2018icpc南京/gym101981 K Kangaroo Puzzle 随机化

    题意: 有一个棋盘上,1是空格,0是障碍物,一开始每个空格里都有一只袋鼠,你可以命令所有袋鼠一起向上下左右一个方向走一格,一旦碰到边界或障碍物,袋鼠就不动,如果它后面有袋鼠这两个袋鼠就会挤进一个格子, ...

  2. iOS 技能图谱

    # iOS 技能图谱## 编程语言 - Swift - Objective-C - C++/C - JavaScript ## 操作系统 - Mac OSX - iOS - watchOS - tvO ...

  3. Spring系列.@EnableRedisHttpSession原理简析

    在集群系统中,经常会需要将Session进行共享.不然会出现这样一个问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的Session,会强制让用户重 ...

  4. TIOBE 编程语言排行榜是什么,它是如何计算编程语言排行的?

    做为一名程序员,都比较关注其使用编程语言的热度,一方面编程语言的热度决定了它拥有多大的市场,另一方面也关系到行业内程序员选择机会有多大. 我们总听说某个编程语言排名第一,那么这些数据到底准不准确呢? ...

  5. 60、saleforce的future方法

    测试future方法的异步执行 public with sharing class FutureSample { //future在自己线程中运行,直到资源可用才运行 @future public s ...

  6. 阿里云epel源

    epel是个好东西,不过国外的速度实在是不能忍受.所以 有了这篇文章.1. 首先卸载以前装的epel以免影响 rpm -e epel-release 2. 下载阿里提供的epel wget -P /e ...

  7. assets和static

    相同点: assets和static两个都是存放静态资源文件.项目中所需要的资源文件图片,字体图标,样式文件等都可以放在这两个文件下. 不相同点: assets中存放的静态资源文件在项目打包时,也就是 ...

  8. jQuery表单对象属性过滤器再探究(原创)

    上面例子的总结: 1.”+n+”千万不要把前面或者后面的+漏掉了.否则不会出现正确结果 2.$(“:checkbox”).click(countChecked)注意写法,不是click(functio ...

  9. [轉]sendpage漏洞分析 CVE-2009-2692

    之前看了<新爆内核高危漏洞sock_sendpage的利用分析的讨论 >这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末.现与大家分享(引用自我的空间 ).有什么不足之处 ...

  10. Neo4j基础入门

    图数据库基础知识 图数据库以图这种数据结构为基础,可以保存任意种类的数据,以下图为基础,简单介绍Neo4j中的几个简单概念: 1.节点(Nodes) 表示图数据库的实体(entities),代表图数据 ...