借助mbedTLS了解DTLS握手协议
本文旨在通过mbedTLS协议栈的实践操作,解析DTLS的源码握手过程。DTLS是源码小白app源码在UDP层面上为TLS提供安全防护的协议,特别适合资源受限的源码嵌入式环境,如CoAP在物联网和云端通讯中的源码应用。
在mbedTLS这个开源且轻量级的源码SSL/TLS库中,我们利用其自带的源码dtls_client/dtls_server测试程序来观察握手过程。这个程序虽然在localhost上运行,源码但可以作为理解DTLS握手的源码基础。它使用了ECDHE_RSA_WITH_AES__GCM_SHA的源码加密套件,握手过程与RSA密钥交换有所不同,源码如多了Server Key Exchange报文。源码
为了深入分析,我们需要在源代码中开启调试信息,如在dtls_client.c和dtls_server.c中设置DEBUG_LEVEL,记录时间戳。然后,通过Wireshark抓包工具分析网络交互,结合调试信息理解握手报文的发送和接收。
DTLS握手流程包括客户端发送Client Hello,可能包含Hello Verify Request(首次连接时有,后续使用Cookie验证),然后是服务器回应Server Hello,接着是证书交换、服务器公钥交换、Change Cipher Spec和Finished等报文的交互。验证阶段很重要,如使用Cookie来防止DoS攻击,确保服务器与合法客户端建立连接。
握手结束后,双方利用协商的laya源码解读会话密钥对应用数据进行加密,每个数据包都包含序列号以保证数据顺序。通过mbedTLS的实例,我们可以直观理解DTLS握手协议的工作原理。
总结,虽然之前对SSL/TLS有所了解,但实际应用时仍需深入研究,例如mbedTLS的代码。通过实践和记录,我们可以更好地应对相关问题,为后续学习和工作提供参考。
SRS4.0源代码分析之WebRTC服务总体介绍
SRS4.0的WebRTC服务提供了一种强大的实时音视频通信解决方案,它基于Web标准,支持浏览器之间的双向通信。SRS4.0引入WebRTC的主要目的是为了增强服务器的SFU(服务器转发单元)功能,以优化客户端接入和降低音视频处理对服务器CPU的负担。通过部署SFU,客户端可以将本地音视频数据推送到服务器,同时服务器根据需要拉取数据,实现低延迟的直播连麦场景。
WebRTC涉及的知识点广泛,包括SDP报文处理、ICE连接建立、DTLS加密等,但SRS4.0的重点在于简化用户对WebRTC的理解。SRS4.0 WebRTC服务的核心模块在`srs_app_rtc_server.cpp`中初始化,主要负责自签名证书生成、UDP端口监听(如)和推拉流API接口注册。RTMP与WebRTC的不同在于,WebRTC通过P2P/ICE技术建立UDP连接,而RTMP则通过socket复用控制命令和数据流。
SRS4.0通过HTTP(S)接口提供对外API,如/rtc/v1/publish/和/rtc/v1/play/,用于接收和发送音视频数据。镜维源码当客户端发起推流或拉流请求时,SRS会创建相应的对象(如SrsRtcPublishStream和SrsRtcPlayStream),并处理SDP交换和ICE连接建立。推流和拉流过程涉及SDP报文协商,ICE用于客户端和服务端建立数据传输通道,确保安全性和稳定性。
最后,总结SRS4.0 WebRTC的处理流程:首先,监听端口并提供API接口;其次,根据API请求创建相应的数据流对象;接着,通过SDP和ICE建立连接;最后,音视频数据在服务器和客户端之间按此流程传递:客户端→服务器→SRS对象→客户端。理解这些核心流程有助于深入研究SRS4.0的WebRTC功能和实现机制。
EMQX-简介、安装部署、基础功能、python代码测试
MQTT属于是物联网的通信协议,在MQTT协议中有两大角色:客户端(发布者/订阅者),服务端(Mqtt broker);针对客户端和服务端需要有遵循该协议的的具体实现,EMQ/EMQX就是MQTT Broker的一种实现。
EMQX是基于 Erlang/OTP 平台开发的 MQTT 消息服务器,是开源社区中最流行的 MQTT 消息服务器。EMQ X 是开源百万级分布式 MQTT 消息服务器(MQTT Messaging Broker),用于支持各种接入标准 MQTT协议的设备,实现从设备端到服务器端的消息传递,以及从服务器端到设备端的设备控制消息转发。从而实现物联网设备的数据采集,和对设备的操作和控制。
到目前为止,比较流行的 MQTT Broker 有几个:使用 C 语言实现的 MQTT Broker,使用 Erlang 语言开发的 MQTT Broker,使用 Node.JS 开发的 MQTT Broker,同样使用 Erlang 开发的源码云下载 MQTT Broker。从支持 MQTT5.0、稳定性、扩展性、集群能力等方面考虑,EMQX 的表现应该是最好的。
与别的MQTT服务器相比EMQ X 主要有以下的特点:经过+版本的迭代,EMQ X 目前为开源社区中最流行的 MQTT 消息中间件,在各种客户严格的生产环境上经受了严苛的考验;支持丰富的物联网协议,包括 MQTT、MQTT-SN、CoAP、 LwM2M、LoRaWAN 和 WebSocket等;优化的架构设计,支持超大规模的设备连接。企业版单机能支持百万的 MQTT 连接;集群能支持千万级别的 MQTT 连接;易于安装和使用;灵活的扩展性,支持企业的一些定制场景;中国本地的技术支持服务,通过微信、QQ等线上渠道快速响应客户需求;基于 Apache 2.0 协议许可,完全开源。EMQ X 的代码都放在 Github 中,用户可以查看所有源代码;EMQ X 3.0 支持 MQTT 5.0 协议,是开源社区中第一个支持 5.0协议规范的消息服务器,并且完全兼容 MQTT V3.1 和 V3.1.1 协议。除了 MQTT 协议之外,EMQ X 还支持别的一些物联网协议;单机支持百万连接,集群支持千万级连接;毫秒级消息转发。EMQ X 中应用了多种技术以实现上述功能;利用 Erlang/OTP 平台的软实时、高并发和容错(电信领域久经考验的语言);全异步架构;连接、会话、路由、集群的分层设计;消息平面和控制平面的分离等;扩展模块和插件,EMQ X 提供了灵活的扩展机制,可以实现私有协议、翘板公式源码认证鉴权、数据持久化、桥接发和管理控制台等的扩展;桥接:EMQ X 可以跟别的消息系统进行对接,比如 EMQ X Enterprise 版本中可以支持将消息转发到 Kafka、RabbitMQ 或者别的 EMQ 节点等;共享订阅:共享订阅支持通过负载均衡的方式在多个订阅者之间来分发 MQTT 消息。比如针对物联网等 数据采集场景,会有比较多的设备在发送数据,通过共享订阅的方式可以在订阅端设置多个订阅者来实现这几个订阅者之间的工作负载均衡。
典型的物联网平台包括设备硬件、数据采集、数据存储、分析、Web / 移动应用等。EMQX 位于数据采集这一层,分别与硬件和数据存储、分析进行交互,是物联网平台的核心:前端的硬件通过 MQTT 协议与位于数据采集层的 EMQX 交互,通过 EMQX 将数据采集后,通过 EMQX 提供的数据接口,将数据保存到后台的持久化平台中(各种关系型数据库和 NOSQL 数据库),或者流式数据处理框架等,上层应用通过这些数据分析后得到的结果呈现给最终用户。
EMQX 公司主要提供三个产品,可在官网首页产品导航查看每一种产品;主要体现在支持的连接数量、产品功能和商业服务等方面的区别。
完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范支持;QoS0, QoS1, QoS2 消息支持;持久会话与离线消息支持;Retained 消息支持;Last Will 消息支持;TCP/SSL 连接支持;MQTT/WebSocket/SSL 支持;HTTP 消息发布接口支持;$SYS/# 系统主题支持;客户端在线状态查询与订阅支持;客户端 ID 或 IP 地址认证支持;用户名密码认证支持;LDAP 认证;Redis、MySQL、PostgreSQL、MongoDB、HTTP 认证集成;浏览器 Cookie 认证;基于客户端 ID、IP 地址、用户名的访问控制 (ACL);多服务器节点集群 (Cluster);支持 manual、mcast、dns、etcd、k8s 等多种集群发现方式;网络分区自动愈合;消息速率限制;连接速率限制;按分区配置节点;多服务器节点桥接 (Bridge);MQTT Broker 桥接支持;Stomp 协议支持;MQTT-SN 协议支持;CoAP 协议支持;Stomp/SockJS 支持;延时 Publish ($delay/topic);Flapping 检测;黑名单支持;共享订阅 ($share/:group/topic);TLS/PSK 支持;规则引擎;空动作 (调试);消息重新发布;桥接数据到 MQTT Broker;检查 (调试);发送数据到 Web 服务。
EMQ X 目前支持的操作系统:Centos6、Centos7、OpenSUSE tumbleweed、Debian 8、Debian 9、Debian 、Ubuntu .、Ubuntu .、Ubuntu .、macOS .、macOS .、macOS .、Windows Server 。产品部署建议 Linux 服务器,不推荐 Windows 服务器。安装的方式有很多种,可供自由选择:Shell脚本安装、包管理器安装、二进制包安装、ZIP压缩包安装、Homebrew安装、Docker运行安装、Helm安装、源码编译安装。
Dashboard界面查看基本信息。
身份认证是大多数应用的重要组成部分,MQTT 协议支持用户名密码认证,启用身份认证能有效阻止非法客户端的连接。EMQ X 中的认证指的是当一个客户端连接到 EMQ X 的时候,通过服务器端的配置来控制客户端连接服务器的权限。EMQ X 的认证支持包括两个层面:MQTT 协议本身在 CONNECT 报文中指定用户名和密码,EMQ X 以插件形式支持基于 Username、ClientID、HTTP、JWT、LDAP 及各类数据库如 MongoDB、MySQL、PostgreSQL、Redis 等多种形式的认证;在传输层上,TLS 可以保证使用客户端证书的客户端到服务器的身份验证,并确保服务器向客户端验证服务器证书。也支持基于 PSK 的 TLS/DTLS 认证。
EMQ X 支持使用内置数据源(文件、内置数据库)、JWT、外部主流数据库和自定义 HTTP API 作为身份认证数据源。连接数据源、进行认证逻辑通过插件实现的,每个插件对应一种认证方式,使用前需要启用相应的插件。客户端连接时插件通过检查其 username/clientid 和 password 是否与指定数据源的信息一致来实现对客户端的身份认证。(v5.0以上默认集成)EMQ X 支持的认证方式:内置数据源、外部数据库、其他。认证结果:认证成功、认证失败、忽略认证(ignore)。
EMQ X 默认配置中启用了匿名认证,任何客户端都能接入 EMQ X。没有启用认证插件或认证插件没有显式允许/拒绝(ignore)连接请求时,EMQ X 将根据匿名认证启用情况决定是否允许客户端连接。
可以订阅多个主题。
安装 paho-mqtt:导入 Paho MQTT 客户端。
通过TCP连接:设置 broker、port、topic、client_id,连接 MQTT Broker。
通过SSL/TLS连接:设置 broker、port、topic、client_id,连接 MQTT Broker,使用 CA certificate,设置用户名密码。
订阅主题:设置 on_message 回调函数,当收到消息时执行。
取消订阅:通过以下代码取消订阅,此时应指定取消订阅的主题。
发布消息:通过以下代码发布消息,设置消息内容、主题,调用 publish 方法。
接收消息:通过以下代码指定客户端对消息事件进行监听,并在收到消息后执行回调函数,将接收到的消息及其主题打印到控制台。
断开连接:如客户端希望主动断开连接,可以通过如下代码实现。
完整代码:导入 random、time、paho.mqtt.client as mqtt_client,设置 broker、port、topic、client_id,连接 MQTT Broker,设置 on_connect 回调函数,设置 publish 回调函数,运行客户端。
metaRTC5.0新版本支持mbedtls(PolarSSL)
mbed TLS(PolarSSL)是TLS和SSL协议的实现,特别适合小型嵌入式设备,性能优越于openssl。metaRTC5.0版本新增支持openssl与mbed TLS。此版本对mbedtls2.0与3.0版本具有兼容性。
下载mbedtls源码并进行编译,需对mbedtls/mbedtls_config.h(mbedtls3.0)与mbedtls/config.h(mbedtls2.0)中的参数进行修改,去掉#define MBEDTLS_SSL_DTLS_SRTP的注释以激活其功能。
使用CMake文件(CMakeLists.txt)进行编译配置,将ON设置在cmake文件中以支持mbedtls,或者通过编译参数实现支持。
创建build目录并切换至该目录,执行cmake ..命令进行预编译,然后使用make命令进行编译。
对于metaRTC的编译,需调整yang_config.h中的配置,将Yang_Using_Openssl设为1以使用openssl,或设为0使用mbedtls。在qt demo工程中,需注释openssl相关部分,取消mbedtls部分的注释。在cmake工程中,需设置mbedtls静态库的链接。
基于 MQTT 协议的 IoT 物联网设备已成为黑客攻击的头号载体和目标
在Forrester最新的年物联网安全报告中,MQTT协议驱动的物联网设备已凸显为黑客首要的攻击目标和猎物。 物联网设备的安全隐患源自其设计缺陷,如普遍采用默认密码,这使得它们容易遭受黑客入侵。随着IoT设备承担越来越多关键任务,它们的高价值特性使得它们成为黑客的首要攻击目标,据统计,年工业计算机受攻击比例达到.3%,仅年上半年,针对IoT设备的攻击次数已突破亿次。 MQTT协议,因其对低带宽、不稳定网络的适应性,广泛应用于如下的场景:发布/订阅消息模式,支持一对一或多对多消息传递
基于TCP/IP传输数据
简化数据包格式
默认使用TCP的端口,部分服务采用(WebSocket)或(TLS加密)
MQTT协议的核心包括发布者、订阅者、代理(BROKER)以及主题(TOPIC),消息由发布者发布到主题,订阅者通过BROKER接收。然而,这一便利性也为潜在攻击提供了可乘之机。 攻击者可以利用MQTT协议的漏洞和开源工具,如mqtt-pwn,进行非法操作。如无安全措施,匿名访问和默认配置可能导致恶意用户轻易接入。攻击者通过connect命令连接服务器,获取系统信息并窃取topic信息。 为了加强MQTT的安全,建议采取以下措施:关闭匿名访问,实施用户身份验证
优先使用TLS/DTLS加密,保护数据免受中间人攻击
加密Payload数据传输
使用最新安全版本的服务端软件
避免在公开平台公开源代码
以上信息由IoT物联网技术于年8月日在上海发布,引用请留意版权事宜。2024-12-28 16:37
2024-12-28 16:35
2024-12-28 16:32
2024-12-28 16:29
2024-12-28 15:46