本文主要内容涉及到TLS协议发展历程、TLS协议原理以及在HTTPS中的应用,以希望读着对TLS协议的基本工作原理和实际应用有个基本认识。
我们在访问网站的时候经常会碰到以下两种情况:
网站1:
网站2:
从图中可以看到:网站1地址前面显示不安全
字样,网站2前面显示🔐
的字样,这两种网站本质区别在于有没有使用TLS协议
进行通信保护。
浏览器正式通过这种方式提醒用户访问的网站是否安全
,通信消息是否会被窃听。
注:上图使用的浏览器为chrome浏览器
,其他浏览器可能稍有差别。
TLS协议:(Transport Layer Security)是用来保证网络通信安全
的密码学协议
。被广泛应用在电子邮件、即时通信、VoIP以及HTTPS协议中,其中HTTPS
最为常见。TLS协议能够保证通信消息的隐私性、消息完整性以及通信实体的身份鉴别
TLS协议(前身SSL)从1986左右开始,经过了多个版本的发展(以下图片来自维基百科):
密码算法支持
和握手效率
上等方面进行了显著优化。在介绍TLS协议原理前,我们首先了解下,网络安全通信模型
:
无TLS协议保护
有TLS协议保护
从上图中我们可以看到,在网络通信过程中,如果未使用tls保护,会存在通信消息被窃听
、篡改
的风险,同时攻击者可以伪造身份
进行通信;而使用了TLS协议,能够保证消息的隐私性
、完整性
和通信实体身份实体的真实性
。
注:在访问网站的场景中,这里的Alice
、Bob
和Eve
可以理解为浏览器
、Web网站
和网络攻击者
TLS协议离不开密码技术的支持,密码技术贯穿TLS协议流程的各个环节,其中:
TLS协议包含多个子协议
:
Application Data Protocol
): 用于密文传输Alert Protocol
):在TLS连接中,如果发生了错误或异常情况,TLS协议会使用Alert Protocol发送警报信息,以通知对方发生了什么问题。Handshake Protocol
):用于密钥协商Change Cipher Spec Protocol
): 在TLS连接中通知对方加密算法已经切换Record Protocol
): 在TLS连接中对数据进行分段、压缩、加密和认证。上面4个子协议的数据都会通过Record Protocol进行处理,然后再通过网络传输。TLS协议的核心是TLS握手协议
,握手流程如下:
TLS握手过程中客户端和服务端会进行多轮交互
,交互过程中会发送握手协议包
(下文描述中我们称为xx消息
)
上图中标*
的部分根据场景为可选
,如:
双向认证
中,server发送CertificateRequest
消息, 客户端响应Certificate
消息和CertificateVerify
消息(服务端使用这两个消息验证客户端身份)会话恢复
(非首次建立TLS链接)中,图中标*
的消息不参与握手流程[]
的ChangeCipherSpec
协议不属于握手流程传递的消息,而是通过Change Cipher Spec Protocol
规定的消息格式进行发送。下面我们以服务器单向认证
为例,介绍TLS握手协议的详细流程:
ClientHello
消息,消息内容包括:
master key
)ClientHello
消息内容以及本地支持的TLS版本
和加密套件
确定本次通信的SSL版本
和加密套件
,并通过ServerHello
消息通知给客户端, 消息内容包括:
TLS版本
master key
)加密套件
, (从ClientHello加密套件
中选择一个双方都支持的)服务端数字证书
和证书链
通过Certificate消息
发送给客户端
,客户端基于该消息:
服务端数字证书
的证书链,验证服务端身份rsaKeyAgreement
,则使用服务端数字证书中携带的服务端公钥
对预备主密钥
进行加密。新建会话
并使用ecdh
密钥协商时有效,该消息包含服务端密钥协商DH参数
,如下:
ServerHelloDone消息
,通知客户端版本和加密套件协商结束服务器证书
合法后,将客户端密钥协商部分
通过ClientKeyExchange消息
发送给服务器, 消息内容包括:
rsaKeyAgreement
, 则为主密钥密文(客户端从服务端发送的Certificate消息
中提取服务端公钥,对pre master secret
进行加密获得)ecdhKeyAgreement
, 则为客户端DH参数。该消息发送成功后,客户端和服务端,都得到了完整的主密钥:
rsaKeyAgreement
, 服务端使用自己的私钥解密收到的ClientKeyExchange消息携带的主密钥密文
ecdhKeyAgreement
, 服务端和客户端运行DH算法,根据服务端DH参数
和客户端DH参数
, 计算得到。ChangeCipherSpec消息
,通知服务器后续报文将采用协商好的主密钥
和加密套件进行密文通信
。服务端握手消息
,计算Hash值,并使用协商好的密钥
和加密套件
进行加密,通过Finished消息
发送给服务器。服务端进行解密和验证。ChangeCipherSpec消息
,通知客户端后续报文将采用协商好的密钥和加密套件进行密文通信
客户端握手消息
,计算Hash值,并使用协商好的密钥
和加密套件
进行加密,通过Finished消息
发送给客户端。密文
进行通信,保证了通信消息的隐私性
wireshark下载传送门:https://www.wireshark.org/
wireshark是一款比较优秀的网络协议分析软件,常用于网络抓包
和网络协议分析
。
下面我们以访问某知名大学网站,通过网络抓包详细分析下TLS协议流程
。
图一:概览图
从图一抓包结果我们可以了解到:
- Client Hello - Server Hello - Certificate, Server Key Exchange, Server Hello Done - Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message - New Session Ticket, Change Cipher Spec, Encrypted Handshake Message - Application Data
图二:客户端 -> 服务端:Client Hello
从上图可以看到:
Client Hello
TLS 1.2 (0x0303)
, 其中0x0303
为内部版本号,如TLS1.3为0x0304
。随机数
加密套件
,优先级从上到下。图三:服务端 -> 客户端:Server Hello
从上图可以看到:
Server Hello
TLS 1.2
随机数
加密套件
为TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
,该加密套件各字段用途如下:图四:服务端 -> 客户端:Certificate, Server Key Exchange, Server Hello Done
从上图可以了解到,本次通信tcp包携带了3个tls握手协议包:
id-at-commonName=*.pku.edu.cn"
表示为北京大学服务器网站id-at-commonName=DigiCert Global Root CA
, 该根CA为知名签发机构(隶属于美国)图五:客户端 -> 服务端:Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
从上图可以了解到,本次通信tcp包携带了3个tls握手协议包:
图六:服务端 -> 客户端: New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
从上图可以了解到,本次通信tcp包携带了3个tls协议包:
图七:客户端 <-> 服务端:Application Data
从上图可以看到:
Application Data Protocol
,是TLS协议的另一个子协议。本文主要介绍了TLS协议发展历程、TLS协议原理以及在HTTPS中的应用,并在最后通过wireshark对TLS网络协议进行了详细的抓包分析。
TLS协议
在网络安全通信中具有重要应用,可以说网络安全
离不开TLS协议的支持,理解TLS协议原理对于建设安全网站
,编写安全网络程序
以及防止数据泄露
等方面具有重要意义。
本文详细介绍了TLS1.2协议
,但未涉及到TLS1.3协议
的相关内容,TLS1.3在安全性
、握手性能
以及扩展性
上做了进一步优化,后续会单独通过另一篇文档进行详细介绍。
————————————————
版权声明:本文为博客园博主「warm3snow」的原创文章,转载请附上原文出处链接及本声明。
原文链接:https://www.cnblogs.com/informatics/