TLS详解之原理和实践(一)

这篇具有很好参考价值的文章主要介绍了TLS详解之原理和实践(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


主页

  • 个人微信公众号:密码应用技术实战
  • 个人博客园首页:https://www.cnblogs.com/informatics/

引言

本文主要内容涉及到TLS协议发展历程、TLS协议原理以及在HTTPS中的应用,以希望读着对TLS协议的基本工作原理和实际应用有个基本认识。


背景

我们在访问网站的时候经常会碰到以下两种情况:

  • 网站1:
    TLS详解之原理和实践(一)

  • 网站2:
    TLS详解之原理和实践(一)

从图中可以看到:网站1地址前面显示不安全字样,网站2前面显示🔐的字样,这两种网站本质区别在于有没有使用TLS协议进行通信保护。
浏览器正是通过这种方式提醒用户访问的网站是否安全,通信消息是否会被窃听。

注:上图使用的浏览器为chrome浏览器,其他浏览器可能稍有差别。


发展历程

TLS协议:(Transport Layer Security)是用来保证网络通信安全密码学协议。被广泛应用在电子邮件、即时通信、VoIP以及HTTPS协议中,其中HTTPS最为常见。TLS协议能够保证通信消息的隐私性消息完整性以及通信实体的身份鉴别


TLS协议(前身SSL)从1986左右开始,经过了多个版本的发展(以下图片来自维基百科):
TLS详解之原理和实践(一)

  • SSL协议作为TLS的前身,由于存在诸多安全漏洞,已经在2015全部被废弃.
  • TLS协议也经过了多个版本的迭代,其中TLS1.0和TLS1.1由于在协议中使用了MD5、SHA-1等因素,在2021年相继被废弃
  • TLS1.2解决了之前版本的安全问题。已成为使用最广泛的TLS协议,据统计99%以上的网站支持了TLS1.2
  • TLS1.3移除了不安全的密码算法,并在密码算法支持握手效率上等方面进行了显著优化。

协议原理

网络通信模型

在介绍TLS协议原理前,我们首先了解下,网络安全通信模型

  • 无TLS协议保护
    TLS详解之原理和实践(一)

  • 有TLS协议保护
    TLS详解之原理和实践(一)

从上图中我们可以看到,在网络通信过程中,如果未使用tls保护,会存在通信消息被窃听篡改的风险,同时攻击者可以伪造身份进行通信;而使用了TLS协议,能够保证消息的隐私性完整性和通信实体身份实体的真实性

注:在访问网站的场景中,这里的AliceBobEve可以理解为浏览器Web网站网络攻击者

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详解之原理和实践(一)

TLS握手过程中客户端和服务端会进行多轮交互,交互过程中会发送握手协议包(下文描述中我们称为xx消息)
上图中标*的部分根据场景为可选,如:

  • 双向认证中,server发送CertificateRequest消息, 客户端响应Certificate消息和CertificateVerify消息(服务端使用这两个消息验证客户端身份)
  • 会话恢复非首次建立TLS链接)中,图中标*的消息不参与握手流程
  • []ChangeCipherSpec协议不属于握手协议,而是Change Cipher Spec Protocol子协议。

wireshark抓包解析

下面我们以服务器单向认证为例, 并结合wireshark抓包,分析TLS握手协议详细流程:


下面我们以访问某知名大学网站,通过网络抓包详细分析下TLS协议流程
图一:概览图

TLS详解之原理和实践(一)

从图一抓包结果我们可以了解到:

  1. 使用的TLS版本为TLSv1.2
  2. 握手过程中的关键字有:
    - 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

TLS详解之原理和实践(一)

从上图可以看到:

  1. 握手协议消息类型为Client Hello
  2. 客户端支持的TLS版本为TLS 1.2 (0x0303), 其中0x0303为内部版本号,如TLS1.3为0x0304
  3. 客户端生成的32字节随机数
  4. 客户端支持的加密套件,优先级从上到下。

图三:服务端 -> 客户端:Server Hello

TLS详解之原理和实践(一)

从上图可以看到:

  1. 握手协议消息类型为Server Hello
  2. 服务端确定的TLS版本为TLS 1.2
  3. 服务端生成的32字节随机数
  4. 服务端确定的加密套件TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,该加密套件各字段用途如下:
    TLS详解之原理和实践(一)

图四:服务端 -> 客户端:Certificate, Server Key Exchange, Server Hello Done

TLS详解之原理和实践(一)

从上图可以了解到,本次通信tcp包携带了3个tls握手协议包:

  1. Certificate消息:
    • 1.1服务端证书,id-at-commonName=*.pku.edu.cn"表示为北京大学服务器网站
    • 1.2证书链,该证书链包含根证书id-at-commonName=DigiCert Global Root CA, 该根CA为知名签发机构(隶属于美国)
  2. Server Key Exchange消息:
  • 2.1 服务端DH参数,参与生成主密钥
  • 2.2 服务端签名,用于验证消息有效性
  1. Server Hello Done消息:通知客户端加密套件协商结束

图五:客户端 -> 服务端:Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message

TLS详解之原理和实践(一)

从上图可以了解到,本次通信tcp包携带了3个tls握手协议包:

  1. Client Key Exchange消息
    • 1.1 客户端DH参数,参与生成主密钥
  2. Change Cipher Spec消息:通知服务端,客户端已准备好进行密文通信
  3. Encrypted Handshake Message消息:同Finished消息(密文形式)

图六:服务端 -> 客户端: New Session Ticket, Change Cipher Spec, Encrypted Handshake Message

TLS详解之原理和实践(一)

从上图可以了解到,本次通信tcp包携带了3个tls协议包:

  1. New Session Ticket消息: 服务器在TLS握手过程中生成一个新的会话票据(Session Ticket),并将其发送给客户端。客户端可以在后续的TLS握手中使用该会话票据来恢复之前的会话状态,从而避免了重新进行完整的TLS握手流程,提高了握手的效率和安全性。
  2. Change Cipher Spec消息:通知客户端,服务端已准备好进行密文通信
  3. Encrypted Handshake Message消息:同Finished消息(密文形式)

图七:客户端 <-> 服务端:Application Data

TLS详解之原理和实践(一)

从上图可以看到:

  1. 该消息不属于TLS握手协议,属于Application Data Protocol,是TLS协议的另一个子协议。
  2. Encrypted Application Data: 所有应用数据都被加密传输。

结论

本文主要介绍了TLS协议发展历程、TLS握手流程等,并结合wireshark对TLS1.2服务端单项认证进行了详细的抓包分析。

TLS协议在网络安全通信中具有重要应用,可以说网络安全离不开TLS协议的支持,理解TLS协议原理对于建设安全网站编写安全网络程序
以及防止数据泄露等方面具有重要意义。


展望

本文详细介绍了TLS1.2协议,但未涉及到TLS1.3协议的相关内容,TLS1.3在安全性握手效率等方面具有巨大提升,后续会单独通过另一篇文档进行详细介绍。文章来源地址https://www.toymoban.com/news/detail-481305.html


参考资料

  • TLS1.2 RFC: https://www.ietf.org/rfc/rfc5246.txt
  • TLS维基百科: https://en.wikipedia.org/wiki/Transport_Layer_Security
  • wireshark下载传送门:https://www.wireshark.org/

到了这里,关于TLS详解之原理和实践(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 干货|三个维度详解 Taier 本地调试原理和实践

    在平时和开发者们交流的过程中,发现许多开发朋友尤其是新入门 Taier 的开发者,对于本地调试都有着诸多的不理解和问题。本文就大家平时问的最多的三个问题,服务编译,配置本地运行,如何在 Taier 运行 Flink-standalone,进行简单的介绍,希望和大家共同交流学习。 在本

    2024年02月11日
    浏览(26)
  • 【Linux操作系统】网络配置详解:从原理到实践(详细通俗讲明DNS)

    导语:网络配置是Linux系统中的一项重要任务,合理的网络配置可以保证计算机与其他设备的正常通信。本文将详细介绍Linux网络配置的原理和实践,包括网络配置原理、查看网络IP和网关、测试网络连通性、网络环境配置、设置主机名和hosts映射以及主机名解析过程分析等内

    2024年02月14日
    浏览(36)
  • Elasticsearch(实践2)链接库产生TLS验证安全性报错

    问题:   File \\\"/home/server/miniconda3/envs/rag/lib/python3.8/site-packages/elastic_transport/_transport.py\\\", line 328, in perform_request     meta, raw_data = node.perform_request(   File \\\"/home/server/miniconda3/envs/rag/lib/python3.8/site-packages/elastic_transport/_node/_http_urllib3.py\\\", line 202, in perform_request     raise err from None elas

    2024年01月18日
    浏览(29)
  • 简述TLS/SSL的工作原理

    还是大剑师兰特 :曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。 No. 内容链接 1 Openlayers 【入门教

    2024年04月17日
    浏览(24)
  • SSL/TLS协议的概念、工作原理、作用以及注意事项

    个人主页: insist--个人主页​​​​​​ 本文专栏:网络基础——带你走进网络世界 本专栏会持续更新网络基础知识,希望大家多多支持,让我们一起探索这个神奇而广阔的网络世界。 目录 一、SSL/TLS协议的基本概念

    2024年02月10日
    浏览(30)
  • SSL/TLS 协议信息泄露漏洞(CVE-2016-2183)【原理扫描】

    SSL/TLS协议 RC4信息泄露漏洞被扫描出来,一般出现的问题在ssh和https服务上使用了DES、3DES算法,禁用这些算法就好了 1.使用nmap扫描出来: nmap -sV --script ssl-enum-ciphers -p 443 ip 2.使用绿盟扫描 显示CVE-2016-2183漏洞 apache: 1.禁止apache服务器使用RC4加密算法 2.重启apache服务 Nginx: 1.禁止

    2024年02月09日
    浏览(56)
  • TLS/SSL 详解

    参考:https://juejin.cn/post/6844903667577929742 参考:https://zhuanlan.zhihu.com/p/594278172 参考:https://www.bilibili.com/video/BV1KY411x7Jp/?spm_id_from=333.788vd_source=cc0e43b449de7e8663ca1f89dd5fea7d 如上图所示,http请求和响应的报文都是明文的,只要有点http基础的人都能看得懂报文里面的内容,所以需要给

    2024年02月04日
    浏览(36)
  • SSL TLS openssl 详解

    首先我们来看下他们之间的关系。 SSL(Secure Socket Layer)安全套接层是Netscape公司率先采用的网络安全协议。 TLS(Transport Layer Security)传输层安全性协议也是一种网络安全协议,他是基于SSL开发的。可以看作是SSL的升级版。由IETF将SSL标准化后命名为TLS。 openssl是一个是一个开

    2023年04月10日
    浏览(33)
  • SSL和TLS的区别详解

    SSL和TLS是两种不同的加密协议,用于保护网络通信的安全性。SSL(Secure Sockets Layer)是一种加密协议,用于在客户端和服务器之间建立安全的连接。TLS(Transport Layer Security)是SSL的后继版本,是一种更安全的加密协议,用于保护网络通信的安全性。在本文中,我们将从不同的

    2024年02月11日
    浏览(31)
  • SSL/TLS协议详解以及配置实战

    目录 1、什么是 SSL/TLS协议? 2、SSL协议和TLS协议的关系 3、如何使用SSL/TLS协议? 4、使用 HttpClient 发送一个SSL/TLS连接请求 5、浏览器端如何验证数字证书的合法性? 6、如何在Nginx服务器上配置SSL/TLS协议? 7、如何在 Java Web 项目中使用SSL/TLS协议? 8、如何在 Java SpringBoot 项目中

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包