4. 身份认证核心概念
在 ROS2 的 DDS 安全体系中,身份认证解决的是“我到底在和谁通信”这一根本问题。没有身份认证,加密和访问控制都无从谈起,因为系统无法判断对端是可信机器人、合法传感器,还是伪装节点。ROS2 DDS Security 采用公钥基础设施(PKI)思路,以数字证书作为身份载体,通过证书颁发机构(CA)建立信任链,最终把每个节点、每个参与者映射到可验证的身份标识上。
一、数字证书:把公钥和身份绑定在一起
数字证书本质上是一份由可信第三方签名的结构化数据,它把“公钥”与“身份信息”绑定起来。在 ROS2 中,每个安全参与者(Participant)通常持有一张身份证书,证书中包含公钥、主体名称、有效期、用途扩展以及 CA 的数字签名。通信时,节点通过交换证书来证明自己持有对应私钥,而不是直接发送私钥。
证书的关键价值在于防篡改和可验证。只要 CA 的签名有效,接收方就能确认证书内容没有被修改,并且公钥确实属于证书中声明的身份。ROS2 常用的证书格式为 X.509,私钥通常为 PEM 编码,权限文件则使用 XML 描述。下面是一个典型的证书与私钥文件命名示例:
identity_ca.cert.pem # 身份 CA 证书
identity_cert.pem # 节点身份证书
identity_key.pem # 节点身份私钥
permissions_ca.cert.pem # 权限 CA 证书
permissions.xml # 权限描述文件
governance.xml # 安全治理策略
二、公钥基础设施与证书颁发机构
公钥基础设施(PKI)是一整套用于创建、分发、管理、吊销和验证数字证书的机制、策略和角色集合。它不只包含证书本身,还包含 CA、注册机构、证书库、吊销列表和信任锚。ROS2 DDS Security 并不要求完整的商业 PKI,但要求至少有一个可信的 CA 作为信任起点。
证书颁发机构(CA)是 PKI 的核心角色,负责签发证书、维护信任锚、必要时吊销证书。CA 用自己的私钥对证书签名,所有信任该 CA 的节点都使用 CA 证书来验证对端证书。ROS2 中通常区分两类 CA:身份 CA 负责签发身份证书,权限 CA 负责签发权限相关材料。两者可以相同,也可以分离,生产环境更推荐分离,以降低单点风险。
核心关系:CA 私钥签名 → 生成证书 → 节点持有证书与私钥 → 通信时交换证书 → 对端用 CA 证书验证签名 → 验证通过则建立信任。
三、信任链:从根证书到节点身份
信任链是 PKI 中最容易被忽视、却最关键的概念。它描述的是“为什么我可以信任一张从未见过的节点证书”。答案不是直接信任节点,而是信任根 CA,再通过逐级签名关系推导出节点可信。ROS2 中常见的信任链为:根 CA → 身份 CA → 节点身份证书。验证时,接收方从节点证书出发,逐级向上验证签名,直到命中本地配置的信任锚。
信任链必须满足三个条件:每一级签名有效、证书在有效期内、证书用途与当前场景匹配。如果中间 CA 被吊销,或者根证书不匹配,整条链就会断裂,DDS 安全插件会拒绝建立通信。下面这张图展示了 ROS2 中身份认证的信任链与验证路径:
四、身份标识:证书中的“我是谁”
身份标识是证书中用于区分不同实体的名称信息。在 ROS2 DDS Security 中,身份标识通常体现在证书的 Subject 字段,并可与 Governance 和 Permissions 文件中的规则匹配。一个节点是否被允许发布某个话题、订阅某个服务,往往取决于它的身份标识是否满足访问控制策略。
身份标识并不等同于 IP 地址或主机名。IP 会变化,主机名可能被伪造,而证书中的身份标识由 CA 签名保护,具有密码学可信性。ROS2 中常见的身份标识形式包括:
- 节点级身份:每个 Participant 一张证书,适合细粒度控制。
- 设备级身份:同一设备上的多个节点共享证书,便于批量管理。
- 角色级身份:按功能划分,如传感器角色、控制角色、规划角色。
五、案例场景:机器人集群中的身份认证
假设一个仓储机器人集群包含 20 台 AGV、1 台调度服务器和若干充电桩。若所有节点共用一张证书,任何一台设备被攻破,攻击者就能冒充全部节点。正确做法是为每台 AGV 签发独立身份证书,由身份 CA 统一签发,根 CA 作为信任锚保存在所有设备中。调度服务器只信任由该根 CA 签发的证书,从而拒绝未知设备接入。
当 AGV-07 向调度服务器发起通信时,双方交换证书。服务器验证 AGV-07 证书的签名链,确认其由身份 CA 签发,且身份 CA 由根 CA 授权。验证通过后,再检查权限文件是否允许 AGV-07 发布位置话题。整个过程无需人工干预,完全由 DDS 安全插件自动完成。
实践建议:生产环境中,根 CA 私钥应离线保存,身份 CA 私钥限制访问;节点私钥必须设置文件权限,避免被其他进程读取。ROS2 启动时可通过环境变量指定安全材料路径:
export ROS_SECURITY_KEYSTORE=~/ros2_security_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
六、常见误区与复盘
| 误区 | 问题 | 正确做法 |
|---|---|---|
| 所有节点共用一张证书 | 无法区分身份,单点泄露影响全局 | 按节点或设备签发独立证书 |
| 只配置身份证书,忽略 CA 证书 | 无法验证对端,信任链断裂 | 确保根 CA 和身份 CA 证书正确部署 |
| 证书长期不更新 | 过期后通信中断,或被吊销后仍被信任 | 建立证书轮换与吊销机制 |
| 把私钥和证书一起分发 | 私钥泄露等于身份被冒用 | 私钥仅保留在对应节点,权限最小化 |
| 认为加密就等于认证 | 加密只保护内容,不证明对端身份 | 认证、加密、访问控制三者配合使用 |
理解数字证书、PKI、CA、信任链和身份标识之间的关系,是掌握 ROS2 DDS 安全的第一道门槛。证书是身份载体,CA 是信任起点,信任链是验证路径,身份标识是访问控制的依据。只有这五个概念协同工作,ROS2 系统才能在开放网络中建立可信通信,并为后续的加密与权限控制打下基础。