备案 控制台
开发者社区 安全 文章 正文

详述 TLS 握手流程

简介:

握手协议使用若干个报文,它们为服务器认证客户端,为客户端认证服务器,协商加密和散列算法,生成用于数据交换的密码的密钥。握手流程分为两种情况,一种是初始建立会话的完全握手流程,另一种是重用会话的简单流程。

1、完全握手流程

TLS客户端与服务器之间完成握手协议,实现安全连接,需要4个阶段。

image.png

*表示可选或视情而定

(1)第一阶段:客户端与服务器之间建立安全增强能力

客户端发送一个ClientHello报文,然后等待服务器的响应,服务器必须响应一个ServerHello报文,否则将会导致一个致命错误,连接将失败。ClientHello和ServerHello报文用于客户端与服务器之间建立安全增强能力,生成安全参数。

ClientHello和ServerHello建立的属性包括协议版本、会话(Session ID)、密码组和压缩方法。客户端提交的ClientHello所包含的密码组(Cipher Suite)是客户支持的密码算法列表(按优先级降序排列),压缩方法是客户支持的压缩方法列表。服务器发送ServerHello时,协议版本是客户建议的低版本以及服务器支持的最高版本,密码组是从客户端建议的密码算法中选定的一种算法,压缩方法是从客户支持的压缩方法中选择的一种算法。

ClientHello和ServerHello还要产生和交换两个随机数:ClientHello.random和ServerHello.random。随机数是32位时间戳加上28字节随机序列。

(2)第二阶段:服务器认证

发送ServerHello报文之后,服务器需要对自己认证,服务器可以发送它的证书和公钥,也可以请求客户端的证书。具体有以下几种情况。

  • 如果自己要被认证的话,服务器发送自己的证书(Certificate)。Certificate 报文包含一个X.509证书,或者一条证书链。除了匿名DH之外的密钥交换方法都需要发送Certificate报文。
  • 服务器发送ServerKeyExchange(服务器密钥交换)报文(如果要求这样做)。例如,服务器没有自己的证书,或者证书仅用于签名。ServerKeyExchange报文包含签名,被签名的内容包括两个随机数以及服务器参数。
  • 非匿名服务器可以向客户端发送CertificateRequest报文请求一个客户端证书,该报文包含整数类型和CA。服务器已被认证,如果对所选的密码组是合适的,它也可能要求客户端发送客户端证书。
  • 服务器发送ServerHelloDone报文,指示握手的Hello阶段完成,然后等待客户端应答。

(3)第三阶段:客户端认证与密钥交换

客户端收到ServerHelloDone报文后,根据需要检查服务器提供的证书,并判断ServerHelloDone的参数是否可以接受,如果都没有问题,发送一个或多个报文给服务器。

如果服务器请求证书,则客户端必须首先发送一个Certificate报文。但是客户端实在没有证书,就发送一个No certificate警告消息。

客户端接着发送ClientKeyExchange(客户端密钥交换)报文,其内容取决于ClientHello和ServerHello之间协商选择的公钥算法。

如果客户端发送了一个具有签名能力的证书,还应发送一个CertificateVerify报文以显式验证该证书。此报文包含一个签名,对从第1条报文以来的所有握手报文的HMAC值用主密钥进行签名。HMAC是Hash-based Message Authentication Code的简称,是一种与密钥相关的散列计算消息认证码。HMAC运算利用散列算法,以一个密钥和一个报文作为输入,生成一个报文摘要作为输出。

(4)第四阶段:建立密码规约

最后客户端和服务器发送报文建立密码规约,允许它们使用这些密钥和参数。

客户端发送一个ChangeCipherSpec(改变密码规约)报文,将挂起的密码规约复制到当前的密码规约中。紧接着客户端立即用新的算法、密钥和密文加密发送一个Finished(已完成)报文,这个报文可以检查密钥交换和认证过程是否已经成功,其中包括一个校验值,对所有握手以来的报文进行校验。

作为回应,服务器同样发送ChangeCipherSpec和Finished报文。服务器发送自己的ChangeCipherSpec,将挂起的密码规约改为当前密码规约,发送使用新的密码规约的Finished报文。

至此,握手过程完成,客户端和服务器可以开始交换应用数据(Application Data)。

2、简单握手流程

客户端和服务器决定重建以前的会话或者复制一个已经存在的会话(而不是重新协商新安全参数),也就是重用已有的TLS会话,握手流程就简化了。

image.png

与上述完全握手相比,简单握手省略了第二、三两个阶段。

客户端使用含有要重用的会话的会话ID参数发送ClientHello报文。服务器随后检查是否匹配其会话缓存。如果发现匹配,而且服务器希望在指定的会话状态下重建连接,将发送含有同一会话ID的ServerHello报文。如果服务器没有发现匹配的会话ID,将产生一个新的会话ID,客户端和服务器将开始一个完全的TLS握手过程。

紧接着客户端和服务器都必须发送ChangeCipherSpec(改变密码规约)报文,并直接发送Finished报文。

一旦重建会话完成,客户端和服务器就可以交换应用数据。

穿过生命散发芬芳
目录
相关文章
flydean程序那些事
|
安全 算法 网络安全
一篇文章让你彻底弄懂SSL/TLS协议
一篇文章让你彻底弄懂SSL/TLS协议
flydean程序那些事
1726 0
一篇文章让你彻底弄懂SSL/TLS协议
不摸鱼的程序员
|
28天前
|
安全 算法 数据安全/隐私保护
HTTPS 加密工作过程
HTTPS 加密工作过程
不摸鱼的程序员
20 2
..清风
|
1月前
|
安全 数据安全/隐私保护
详解HTTPS加密工作过程
详解HTTPS加密工作过程
..清风
261 1
Lotay_天天
|
算法 安全 网络安全
一篇文章读懂HTTPS TLS 1.2握手流程(下)
一篇文章读懂HTTPS TLS 1.2握手流程
Lotay_天天
10709 2
Lotay_天天
|
Web App开发 安全 网络协议
一篇文章读懂HTTPS TLS 1.2握手流程(中)
一篇文章读懂HTTPS TLS 1.2握手流程
Lotay_天天
2431 0
Lotay_天天
|
编解码 算法 安全
一篇文章读懂HTTPS TLS 1.2握手流程
一篇文章读懂HTTPS TLS 1.2握手流程
Lotay_天天
261 0
技术课堂的搬运工~
|
网络协议 应用服务中间件 网络安全
阿里云环境中TLS/SSL握手失败的场景分析
TLS/SSL握手是一个相对复杂的过程,在阿里云环境中结合产品,安全等特性,可能会让TLS/SSL握手过程的不定性更多。本文来总结下各种握手失败的场景。
技术课堂的搬运工~
2014 0
阿里云环境中TLS/SSL握手失败的场景分析
CodingFire
|
开发者 iOS开发
iOS开发 - 用AFNetworking实现https单向验证,双向验证
iOS开发 - 用AFNetworking实现https单向验证,双向验证
CodingFire
356 0
iOS开发 - 用AFNetworking实现https单向验证,双向验证
Oswald
TLS握手过程
最近看https和http,发现tls协议从1.2到1.3也有了一些改变。
Oswald
283 0
TLS握手过程
开发工程师
|
安全 算法 网络安全
SSL & TLS 协议运行机制详解
互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅RFC文档。
开发工程师
219 0
SSL & TLS 协议运行机制详解

热门文章

最新文章

  • 1
    阿里云A100 GPU服务器租用价格表_按小时_包年包月费用
  • 2
    Hadoop数据迁移MaxCompute最佳实践
  • 3
    Kubernetes 入门教程
  • 4
    Vue+Django+MySQL搭建指南(个人全栈快速开发)
  • 5
    FPGA 那些事儿之异构计算
  • 6
    TextView 代码设置最大长度之maxLength和maxEms
  • 7
    “出海”与管理思想变革
  • 8
    <数据库>高性能Redis快速入门 | (附Redis常用命令)
  • 9
    Cannot instantiate the type List
  • 10
    在迁移邮箱时, Mailbox Size Exceeds Target Quota 2.3GB错误的解决
  • 1
    算法金 | K-均值、层次、DBSCAN聚类方法解析
    22
  • 2
    m基于深度学习的卫星遥感图像轮船检测系统matlab仿真,带GUI操作界面
    20
  • 3
    ELK与Fluentd的结合
    27
  • 4
    基于GA遗传优化的混合发电系统优化配置算法matlab仿真
    33
  • 5
    【题解】—— LeetCode一周小结25
    32
  • 6
    《手把手教你》系列基础篇(八十一)-java+ selenium自动化测试-框架设计基础-TestNG如何暂停执行一些case(详解教程)
    33
  • 7
    基于布谷鸟搜索的多目标优化matlab仿真
    26
  • 8
    JavaScript小数四舍五入的代码
    22
  • 9
    MaxCompute产品使用问题之整库实时需要申请什么东西
    22
  • 10
    MaxCompute产品使用问题之创建了oss外表,格式指定的parquet,然后执行的写入,发现不是标准parquet的格式,该怎么办
    27
  • 相关电子书

    更多
  • 低代码开发师(初级)实战教程
  • 冬季实战营第三期:MySQL数据库进阶实战
  • 阿里巴巴DevOps 最佳实践手册
  • 下一篇
    部署LAMP环境(Alibaba Cloud Linux 3)

    深圳SEO优化公司大浪百度爱采购南联网站seo优化坪地百度网站优化排名爱联百搜标王丹竹头外贸网站制作观澜英文网站建设东莞网站优化推广坪地网站制作南联网络广告推广布吉建网站南联SEO按效果付费宝安网站制作设计盐田seo网站优化大浪百搜词包沙井百搜标王吉祥关键词排名包年推广横岗建设网站南澳企业网站改版大芬网站关键词优化石岩百度关键词包年推广荷坳营销网站深圳网站优化排名广州网站优化按天计费深圳网页制作同乐外贸网站设计爱联网络营销盐田网站建设设计坪地网站优化排名南澳企业网站建设石岩高端网站设计歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化