SSL/TLS/DTLS对比

本文介绍了SSL(安全套接层)及其继任者TLS(传输层安全)和DTLS(数据报传输层安全)协议的基本概念和发展历程。这些协议用于在网络通信中提供安全性和数据完整性保护。文章还详细对比了TLS和DTLS的握手过程,以及它们在OSI模型中的位置。

本文转自:http://blog.youkuaiyun.com/u011196543/article/details/42617785

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(TransportLayer Security,TLS & Datagram Transport Layer Security,DTLS)是为网络通信提供安全及数据完整性的一种安全协议。DTLS、TLS与SSL在传输层对网络连接进行加密,DTLS在UDP传输协议之上,而TLS则在TCP传输协议之上。

各协议版本历史:

SSL 1.0(N/A),2.0(1995),3.0(1996);

TLS 1.0(1999),TLS1.1(2006),TLS1.2(2008);

DTLS 1.0 基于 TLS 1.1,DTLS 1.2 基于TLS 1.2;

SSL、TLS、DTLS协议在OSI 7层网络模型中介于应用层(顶层)与TCP&UDP传输层协议之间,如下:


虽然DTLS是基于TLS协议基础上扩展,适用于UDP传输协议的,但DTLS与TLS有些区别,这在握手协议上可以明显体现出来,如下:

TLS 三次握手协议:


DTLS握手协议:



OSI网络模型



备注:

1. 大家不要搞混淆SSL、TLS、DTLS仅仅是加密协议而已,用来保证通信应用程序之间的数据安全性,并不能解决大数据传输时的乱序与丢包问题。

2. 虽然加密协议不能解决数据丢包和乱序问题,但是数据传输的前提是要建立链接通路,因此才会有握手协议的重传机制。


要在STM32上使用LWIP实现MQTT并支持SSL/TLS,可以按以下思路操作: ### 硬件与环境准备 - **硬件**:选择合适的STM32系列微控制器,确保其具备足够的资源(如RAM、Flash)来运行LWIP和MQTT协议栈。同时,需要有网络接口(如以太网、Wi-Fi模块)用于网络连接。 - **软件**:安装STM32CubeMX用于配置STM32的硬件资源和生成初始化代码;使用MDK-ARM或GCC等开发工具进行代码编译和调试。 ### 配置LWIP - **使用STM32CubeMX配置**:在STM32CubeMX中选择对应的STM32型号,配置网络接口(如ETH),并启用LWIP。在LWIP配置中,开启相关的网络协议和功能,如TCP、UDP等。 - **代码生成**:生成代码后,将生成的代码导入到开发工具中。 ### 集成MQTT协议栈 - **选择MQTT库**:可以选择开源的MQTT库,如Paho MQTT C Client。将MQTT库添加到项目中,并进行相应的配置。 - **配置MQTT客户端**:根据引用[1]中的MQTT客户端特性,在代码中配置MQTT客户端的参数,如RAM占用、QoS级别、心跳保活和断线重连等。例如,设置RAM占用最低可到<3KB,支持QoS0/QoS1,开启自动心跳保活和断线重连(指数退避)功能。 ### 集成SSL/TLS支持 - **选择加密库**:可以使用mbed TLS库,它提供了DTLS/TLS加密传输功能。将mbed TLS库集成到项目中。 - **配置SSL/TLS**:在MQTT客户端代码中,配置SSL/TLS相关参数,如证书验证、加密算法等。确保MQTT客户端与MQTT服务器之间的通信使用SSL/TLS加密。 ### 代码实现示例 以下是一个简单的伪代码示例,展示了如何在STM32上使用LWIP和MQTT并支持SSL/TLS: ```c #include "lwip/api.h" #include "MQTTClient.h" #include "mbedtls/ssl.h" // 初始化LWIP void lwip_init(void) { // LWIP初始化代码 } // 初始化MQTT客户端 void mqtt_client_init(MQTTClient *client) { // MQTT客户端初始化代码 // 设置RAM占用、QoS级别等 client->ram_usage = 3000; // <3KB client->qos = QOS1; // 开启自动心跳保活和断线重连 client->enable_heartbeat = 1; client->enable_reconnect = 1; } // 初始化SSL/TLS void ssl_tls_init(mbedtls_ssl_context *ssl_ctx) { // mbed TLS初始化代码 // 配置证书验证、加密算法等 } int main(void) { lwip_init(); MQTTClient client; mqtt_client_init(&client); mbedtls_ssl_context ssl_ctx; ssl_tls_init(&ssl_ctx); // 连接MQTT服务器 if (MQTTClient_connect(&client, &ssl_ctx) == 0) { // 连接成功,发布和订阅消息 MQTTClient_publish(&client, "topic", "message", QOS1); MQTTClient_subscribe(&client, "topic", QOS1); } while (1) { // 主循环代码 } } ``` ### 资料查找途径 - **官方文档**:ST官方网站提供了STM32的相关文档和教程,包括LWIP和MQTT的使用指南。 - **开源社区**:GitHub等开源社区上有许多关于STM32、LWIP和MQTT的开源项目,可以参考这些项目的代码和文档。 - **论坛和博客**:电子论坛和技术博客上有很多开发者分享的经验和解决方案,可以搜索相关的帖子获取更多信息。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值