1. 课程导入

在机器人系统从单机实验走向多机协同、云端调度和产业落地的过程中,ROS2 的通信中间件 DDS 承担了节点发现、数据分发和服务调用的关键职责。与此同时,机器人网络不再只是实验室里的封闭总线,而是可能跨越 Wi-Fi、5G、车载以太网甚至公网。一旦 DDS 域中的话题、服务或参数被未授权节点订阅、篡改或伪造,轻则造成数据泄露,重则导致运动控制指令被劫持。因此,理解 ROS2 DDS 安全与身份认证,不是附加的安全补丁,而是构建可信机器人系统的前置能力。

本章作为全课程导入,目标不是立刻配置证书,而是建立一张“安全地图”:知道 ROS2 DDS 安全解决什么问题、由哪些核心概念组成、各模块如何协同,以及后续 29 章应沿着怎样的路径逐步深入。

一、学习目标:从“能通信”到“可信通信”

本课程围绕四个层次展开。第一层是认知层:理解 DDS 安全模型与 ROS2 安全机制的对应关系,明确身份认证、访问控制、加密保护和安全发现各自的位置。第二层是配置层:能够为 ROS2 节点生成密钥、证书、权限文件,并正确设置环境变量与安全插件。第三层是验证层:会使用工具观察安全发现过程、抓包分析加密前后的差异,判断策略是否真正生效。第四层是运维层:在证书轮换、节点扩容、跨域通信和故障排查中,能够定位是身份、权限、时间同步还是网络配置导致的问题。

换句话说,学完本课程后,你应当能把“节点能收到消息”升级为“只有被授权的节点才能收到未被篡改的消息”,并能在出现安全告警时快速判断问题边界。

二、核心概念:身份、权限、加密与发现

ROS2 DDS 安全建立在 DDS Security 规范之上,主要由四个支柱构成。第一是身份认证:每个参与者(Participant)持有唯一身份证书,通信双方通过挑战应答确认对方确实持有对应私钥,防止伪造节点加入域。第二是访问控制:通过权限文档(Permissions)规定某个节点可以发布哪些话题、订阅哪些话题、调用哪些服务,实现最小权限原则。第三是加密与完整性保护:对发现流量和用户数据进行加密,并使用消息认证码防止篡改。第四是安全发现:在节点发现阶段就完成身份校验和权限匹配,避免未授权节点进入通信图。

这些概念在 ROS2 中通过 SROS2 工具链落地。SROS2 不是独立中间件,而是对 DDS Security 插件的封装,帮助开发者生成密钥库、证书链、权限签名和治理文件。理解这一点很重要:ROS2 安全配置的根在 DDS,ROS2 只是提供了更友好的管理入口。

ROS2 DDS 安全与身份认证整体框架 身份认证 · 访问控制 · 加密保护 · 安全发现,四层协同构成可信通信底座 身份认证 证书 + 私钥 + CA 链 挑战应答确认对端 防止节点伪造 访问控制 权限文档 Permissions 话题/服务/参数白名单 最小权限原则 加密保护 AES-GCM 数据加密 HMAC 完整性校验 防窃听与防篡改 安全发现 发现阶段校验身份 权限匹配后建链 隔离未授权节点 SROS2 工具链:密钥库 · 证书签发 · 权限签名 · 治理文件 ros2 security create_keystore / create_enclave / generate_artifacts / create_permission 将 DDS Security 插件配置转化为可管理的 ROS2 安全资产 学习路径 · 基础 DDS 安全模型与术语 ROS2 安全架构与插件 密钥库与证书链结构 环境变量与启动方式 学习路径 · 进阶 权限策略与最小授权 安全发现与加密通信 多节点/多域安全配置 证书轮换与生命周期 学习路径 · 实战 安全通信验证与抓包 典型故障定位与复盘 机器人场景安全加固 安全策略持续运维

三、整体框架:从密钥库到通信链路的四步闭环

ROS2 DDS 安全配置可以概括为一条闭环链路。第一步是建立信任根:创建密钥库(keystore),生成 CA 证书和私钥,作为整个机器人域的身份信任锚点。第二步是为节点签发身份:为每个需要安全通信的节点创建 enclave,生成节点证书和私钥,并放入对应目录。第三步是定义权限边界:编写权限文档,声明该节点可发布、订阅、请求、应答的话题和服务,并用 CA 私钥签名。第四步是启用安全插件:通过环境变量或配置文件让 ROS2 节点加载安全插件,在发现和数据通信阶段执行认证、授权与加密。

这四步不是一次性动作,而是持续运维的循环。新增节点要签发证书,调整功能要更新权限,证书到期要轮换,节点下线要吊销。安全配置一旦与系统拓扑脱节,就会出现“该通的通不了、不该通的却能通”的典型问题。

四、典型场景:一个移动机器人车队的通信安全

假设一个仓库中有三台 AGV,分别运行导航节点、调度节点和电池管理节点。未启用安全时,任何一台接入同一 DDS 域的笔记本都可以订阅 /cmd_vel 并伪造速度指令。启用 SROS2 后,导航节点只能发布自身权限文档中允许的话题,调度节点只能订阅其被授权的话题,电池管理节点的数据不会被无关节点读取。即使攻击者接入同一网络,由于没有合法证书,也无法完成安全发现,更无法解密用户数据。

这个场景说明:DDS 安全不是单点加密,而是“身份—权限—加密—发现”共同作用的结果。只加密不控权,合法节点仍可能越权;只控权不加密,数据仍可能被窃听。

五、常见误区与学习建议

常见误区 正确认识
启用安全后所有节点自动互信 每个节点需独立证书和权限,未配置的节点无法加入安全域
只配置加密就足够安全 还需访问控制和安全发现,否则无法防止越权和伪造
权限文档可以随意放宽 应遵循最小权限原则,按话题和服务精确授权
证书生成后一劳永逸 需考虑有效期、轮换、吊销和节点扩容
安全配置与网络配置无关 时间同步、组播、防火墙都会影响安全发现
建议在学习过程中始终保留一个“最小可运行安全示例”:两个节点、一个话题、一套证书。后续每学一个新概念,都在这个示例上做增量修改,比直接上手复杂车队更容易定位问题。
安全配置最常见的排障入口是环境变量和文件路径。若节点启动后无法发现对端,先确认 ROS_SECURITY_ENABLE、ROS_SECURITY_STRATEGY、ROS_SECURITY_KEYSTORE 是否一致,再检查 enclave 路径与权限文件是否匹配。
# 典型安全环境变量示例
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
export ROS_SECURITY_KEYSTORE=~/sros2_keystore

# 启动节点时指定 enclave
ros2 run demo_nodes_cpp talker --ros-args --enclave /talker