TLS协议

TLS协议

简介

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

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

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

TLS协议结构

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

TLS协议

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

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

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

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

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

TLS记录协议

TLS协议

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

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

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

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

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

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

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

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

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

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

TLS协议

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

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

TLS协议

阶段1 约定算法

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

阶段2 验证服务器证书

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

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

TLS协议

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

TLS协议

有点像数据结构中的并查集算法,查证两节点是否有同一个根节点,也就是双方都具有信任点的认证中心。服务器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。过程如下图所示。

TLS协议

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

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

PRF计算公式如下

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

P_hash如图所示

TLS协议

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

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

HTTPS

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

过程如下

TLS协议

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

TLS协议

更进一步

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

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

 

上一篇:Source Insight 没有显示Courier New字体


下一篇:解决keil5中文注释乱码方法