ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TLS协议

2022-02-20 14:34:44  阅读:275  来源: 互联网

标签:TLS 协议 证书 握手 密钥 服务器


TLS协议

简介

​ TLS是这样一种协议,跟前面IPsec保护网络层安全传输有所区别,TLS是基于TCP建立两个应用进程之间的安全连接

​ 在客户/服务器应用模式中,为了实现双向身份鉴别,仅仅在服务器端保留固定安全参数并进行单向验证是不够的。因此,有必要为每一次客户机和服务器之间的数据传输过程动态产生上诉安全参数,而且这些安全参数在每一次数据传输过程结束后自动失效,这将大大增强客户机和服务器之间数据传输的安全性。TLS就是这样一种用于完成双向身份鉴别和安全参数协商的协议

​ TLS的前身是安全插口层SSL(Secure Socket Layer)。

TLS协议结构

实际上,SSL是共同工作的两层协议所组成的,分别是独占一层的TLS记录协议和可以看作TLS记录协议封装的上层应用层数据,但是其中有几个TLS的控制报文,如TLS握手协议TLS密码规范协议TLS报警协议。如下图所示

TLS记录协议传输的上层消息可以实现源端鉴别、保密性和完整性。

TLS握手协议是一种实现身份鉴别和安全参数协商的协议。客户端和服务器端通过TLS记录协议传输数据前,需要通过TLS握手协议完成双向身份鉴别过程,并约定压缩算法、加密算法、消息鉴别MAC算法、加密密钥、MAC密钥等安全参数

通信双方确定新的安全参数后,通过TLS改变密码规范协议通知对方开始使用新约定的安全参数。

报警协议用于传输出错消息,如解密失败、无法确认证书等

通信双方第一次启动握手协议时,初始安全参数为不压缩、不加密、不计算MAC

TLS记录协议

TLS的记录协议封装过程如上诉左图所示

TLS封装后后续添加首部格式如上述右图所示

其不同字段的内容所表示含义不同

  • 内容类型包含TLS握手协议、TLS报警协议、TLS密码改变规范协议或是HTTP消息

  • 主版本号对于TLS固定为3

  • 次版本号对于TLS固定为1

  • 压缩数据长度为加密操作前上层消息长度

    TLS的数据完成性检测就由报文摘要算法计算后的消息鉴别码MAC实现,数据本身的安全性保证则由对压缩后的数据和MAC一起加密实现。

    那么在TLS进行如上诉左图所示的封装前,必须通过TLS握手协议约定如下安全参数压缩算法、加密算法、消息鉴别MAC算法、服务器端写密钥、客户端写密钥、服务器端写MAC密钥、客户端端写密钥和需要

TLS握手协议实现身份鉴别和安全参数协商过程

很显然如图所示,TLS握手协议分为四个阶段,每个阶段都有其作用。

TLS握手协议报文格式如下图所示

阶段1 约定算法

客户C在客户Hello消息中按优先顺序列出客户C支持的算法列表及TLS协议版本,服务器V从客户C支持的算法中选择一种自己也支持的算法作为双方约定的算法,在双方共同支持的TLS版本则选择版本较低的那一个,然后服务器会通过Hello消息将自己的选择会送给客户C

阶段2 验证服务器证书

这就是我们在搭建网站时,为网站配置证书后的作用了。

如图是一些比较著名的证书厂商

客户端对服务器身份鉴别的过程实际上就是确认客户C访问的服务器域名确实为IDv的过程。我们采用的一般就是证书+私钥的鉴别机制。需要服务器提供如下证书链。

有点像数据结构中的并查集算法,查证两节点是否有同一个根节点,也就是双方都具有信任点的认证中心。服务器V一般需要提供如下证书链A<\<C>>,C<\<G>>,G<\<服务器V>>

但是提供上诉证书的过程并不能证明我们此时访问的这个服务器就是我们想要访问的服务器V,因为其他人可以通过劫持证书的方式来获取服务器V的证书。

阶段3 生成主密钥与验证客户证书

这是TLS握手阶段最重要也是最复杂的一个阶段。首先,如果服务器在发送自己证书的同时,也要求客户端发送证书。那客户C也会向服务器V发送自己的证书链。

那么前面提到并不能完全证明服务器V的身份,那么在此步中,客户端为了证明服务器V是具有证书V的私钥Kskv的,就会用其公钥Kpkv加密客户选择的预主密钥PMS(Pre-Master Secret),并通过交换密钥消息将密文发送给服务器,如果最后服务器V和客户端C成功协商出各种安全参数,那么就证明服务器V是具有私钥SKV的

同样的,反过来服务器也需要证明客户C是具有其证书C私钥SKC,也就是客户C是客户C本人。客户C发送的证实证书消息中包含客户C用私钥SKC双方交换的握手协议消息的报文摘要进行解密运算后得到的密文一并发送。在服务器端保留有双方交换的握手协议消息的摘要信息,通过C的公钥PKC加密运算后恢复到握手协议的摘要的明文阶段,与本来保留的摘要信息进行比对后,即可证明用户C是否具有这个私钥SKC。过程如下图所示。

在服务器端V得到预主密钥PMS后生成主密钥MS的过程暂不详细叙述,计算公式如下

MK=PRF(PMS,"master secret",NonceC||NonceV)

PRF计算公式如下

PRF(密钥,标签,种子)=P_MD5(S1,标签||种子)⊕P_SHA-1(S2,标签||种子)注:S1和S2是将密钥平分为前后两部分

P_hash如图所示

阶段4 双方身份鉴别和安全参数切换

实际上,我们的客户端C在此时还未得知服务器V到底是不是服务器V。前面我们不是用它的公钥加密了预主密钥PMS对吧,那只要证明其拥有预主密钥PMS即可证明服务器V身份。也就是服务器V也得到了计算所得得主密钥MS。因此,服务器向V向客户C发送得结束消息中包含加密过的MS等信息。只要客户端通过计算后得到得内容跟这个歌消息相等,则服务器V的身份得到确认。改变密码规范表明发送端已经准备开始使用协商所得的安全参数。

HTTPS

所谓HTTPS也就是在完成上诉双向身份鉴别和安全参数协商之后,传输HTTP报文。用来实现浏览器和服务器之间传输的HTTP消息的保密性、完整性和源端鉴别

过程如下

约定完安全参数后,终端发送HTTP消息的过程如下所示

更进一步

在这一篇博文中,还有对SSL/TLS更详尽的叙述包括握手报文中的具体内容。是个阿里云的大牛写的。

SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程 - 郑瀚Andrew.Hann - 博客园 (cnblogs.com)

 

标签:TLS,协议,证书,握手,密钥,服务器
来源: https://www.cnblogs.com/Samforrest/p/15915413.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有