SSL/TLS协议学习笔记

本文介绍了SSL/TLS协议的握手过程,通过分析CVE-2021-3449漏洞,展示了客户端和服务器如何建立加密连接。在握手过程中,客户端首先发送client_hello,接着服务器回应server_hello、server_certificate和sever_hello_done。客户端验证服务器证书后,发送client_key_exchange,并切换到加密通信。服务器验证后,双方完成握手,开始加密通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在分析cve-2021-3449漏洞的时候接触到了SSL/TLS协议,这个漏洞的原理为:如果从客户端发送了恶意的重新协商ClientHello消息,则OpenSSL TLS服务器可能会崩溃。如果TLSv1.2重新协商ClientHello省略了signature_algorithms扩展名(在最初的ClientHello中存在),但包括了signature_algorithms_cert扩展名,则将导致NULL指针取消引用,从而导致崩溃和拒绝服务攻击。

这里不探讨这个漏洞,我简单贴一下一些协议的基础知识,仅仅作为笔记

握手

下图为握手的大致过程

协议的学习通过抓包分析是最有效率的,这里直接抓了包,可以看到我们需要关注的只是Secure Sockets Layer(SSL)就可以了,下面有一些属性之类的值,其中比较重要的有Random(一个随机数,关系到密钥生成),Extensions(拓展功能)等等,具体字段的含义可以看下我下面的参考

整个建立连接的过程大致如下

1、client_hello(客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息)

2、server_hello+server_certificate+sever_hello_done( server_hello, 服务端返回协商的信息结果,server_certificates, 服务器端配置对应的证书链,用于身份验证与密钥交换; server_hello_done,通知客户端 server_hello 信息发送结束;)

3、证书校验(客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作)

4、client_key_exchange+change_cipher_spec+encrypted_handshake_message(client_key_exchange,合法性验证通过之后,客户端计算产生随机数字 Pre-master,并用证书公钥加密,发送给服务器;  change_cipher_spec,客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信; encrypted_handshake_message,结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证;)

5、change_cipher_spec+encrypted_handshake_message(计算之前所有接收信息的 hash 值,然后解密客户端发送的 encrypted_handshake_message,验证数据和密钥正确性;  change_cipher_spec, 验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信; encrypted_handshake_message, 服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥 session secret 与算法加密并发送到客户端;)

6、握手结束

7、加密通信

 

参考文章

https://blog.csdn.net/mrpre/category_9270159.html
https://www.wosign.com/FAQ/faq2016-0309-04.htm
https://www.uedbox.com/post/9994/

在面对网络通信安全性的挑战时,将硬件加密处理器与SSL库如PolarSSL结合使用是确保数据传输安全性的有效手段。为了帮助你深入理解并实践这一过程,我推荐你查看这份资料:《STM32F217单片机实现SSL加密通讯指南》。这份指南不仅含理论知识,还提供了实际操作的示例,能够直接指导你完成SSL/TLS的实现。 参考资源链接:[STM32F217单片机实现SSL加密通讯指南](https://wenku.csdn.net/doc/4u5ighjchn?spm=1055.2569.3001.10343) 首先,需要在STM32单片机上集成PolarSSL库。这可以通过下载官方提供的源码并将其编译集成到你的STM32开发环境中完成。接下来,根据应用笔记,你需要理解SSL/TLS的工作原理,尤其是握手过程、加密机制和证书验证等关键步骤。 在硬件层面上,STM32F217xx系列单片机提供了硬件加密处理器,能够执行AES、DES、SHA-1、MD5等算法。为了利用这些处理器,你需要配置它们与PolarSSL库一起工作,确保它们能够无缝协作处理加密和解密任务。这括正确初始化硬件加密单元,以及在PolarSSL中设置相应的加密算法和密钥。 具体到代码实现,你需要使用PolarSSL库提供的API来初始化SSL上下文,加载服务器或客户端证书,以及配置SSL连接参数。一旦SSL上下文准备就绪,你就可以使用PolarSSL提供的函数来建立安全连接,进行数据的加密发送和接收。此外,PolarSSL还支持会话恢复机制,这有助于提高SSL通信的效率。 完成这些步骤之后,你可以利用提供的示例代码测试和验证你的SSL通信是否安全可靠。在调试过程中,确保验证SSL/TLS握手是否成功,以及数据传输是否符合预期的安全标准。通过这些实践,你将掌握在STM32单片机上实现SSL/TLS通信的关键技术。 在你成功实现了SSL/TLS通讯之后,我建议继续深入学习《STM32F217单片机实现SSL加密通讯指南》的后续章节,这些内容将帮助你更加全面地理解网络安全协议在嵌入式系统中的应用,为今后的项目打下坚实的基础。 参考资源链接:[STM32F217单片机实现SSL加密通讯指南](https://wenku.csdn.net/doc/4u5ighjchn?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值