设置安全性

目标: 使用“sros2”设置安全性。

教程级别: 高级

时间: 15 分钟

背景

sros2 软件包提供了在 DDS-Security 上使用 ROS 2 的工具和说明。 安全功能已在各个平台(Linux、macOS 和 Windows)以及不同语言(C++ 和 Python)上进行了测试。 SROS2 旨在与任何安全中间件配合使用,但并非所有中间件都是开源的,并且支持因使用的 ROS 发行版而异。

安装

通常在使用 ROS 2 安装指南配置指南 安装后即可获得安全性。 但是,如果您打算从源代码安装或切换中间件实现,请考虑以下注意事项:

从源代码安装

在从源代码安装之前,您需要安装最新版本的 openssl(1.0.2g 或更高版本):

sudo apt update
sudo apt install libssl-dev

如果您没有安装 OpenSSL,请按照:ref:这些说明 操作

Fast DDS 需要额外的 CMake 标志来构建安全插件,因此需要修改 colcon 调用以传递:

colcon build --symlink-install --cmake-args -DSECURITY=ON

选择备用中间件

如果您选择不使用默认中间件实现,请务必在继续之前:doc:更改您的 DDS 实现

ROS 2 允许您在运行时更改 DDS 实现。 请参阅`如何使用多个 RMW 实现 <../../../How-To-Guides/Working-with-multiple-RMW-implementations>` 以探索不同的中间件实现。

请注意,不支持供应商之间的安全通信。

运行演示

1.为安全文件创建一个文件夹

首先创建文件夹来存储此演示所需的所有文件:

mkdir ~/sros2_demo

2. 生成密钥库

使用 sros2 实用程序创建密钥库。 密钥库中的文件将用于为 ROS 2 图表中的所有参与者启用安全性。

cd ~/sros2_demo
ros2 security create_keystore demo_keystore

3. 生成密钥和证书

创建密钥库后,为每个启用了安全性的节点创建密钥和证书。 对于我们的演示,这包括 talker 和 listener 节点。 此命令使用 create_enclave 功能,该功能将在下一个教程中详细介绍。

ros2 security create_enclave demo_keystore /talker_listener/talker
ros2 security create_enclave demo_keystore /talker_listener/listener

4. 配置环境变量

三个环境变量允许中间件定位加密材料并启用(并可能强制执行)安全性。 这些和其他与安全相关的环境变量在`ROS 2 DDS-Security Integration 设计文档 <https://design.ros2.org/articles/ros2_dds_security.html>`_ 中进行了描述。

export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce

这些变量需要在用于演示的每个终端中定义。 为了方便起见,您可以将它们添加到启动环境中。

5. 运行``talker/listener`` 演示

通过启动 talker 节点开始演示。

ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker

在另一个终端中,执行相同操作以启动“侦听器”节点。 必须按照上面步骤 4 的说明正确设置此终端中的环境变量。

ros2 run demo_nodes_py listener --ros-args --enclave /talker_listener/listener

这些节点将使用身份验证和加密进行通信! 如果您查看数据包内容(例如,使用另一个教程中介绍的“tcpdump”或“Wireshark”),则可以看到消息已加密。

注意:您可以任意在 C++(demo_nodes_cpp)和 Python(demo_nodes_py)包之间切换。

这些节点能够进行通信,因为我们为它们创建了适当的密钥和证书。

在回答以下问题时,让两个节点保持运行。

参加测验!

打开另一个终端会话,但**不要**设置环境变量,这样安全性就不会启用。 启动监听器。 你期望发生什么?

停止监听器,将环境变量“ROS_SECURITY_ENABLE”设置为“true”,然后重新启动监听器。 这次你期望什么结果?

停止监听器并将“ROS_SECURITY_STRATEGY”设置为“Enforce”。 现在会发生什么?

了解更多!

您准备好进一步了解 ROS 安全性了吗? 请查看 Secure Turtlebot2 Demo。 您将找到 ROS 2 安全性的功能齐全且复杂的实现,随时可以尝试您自己的自定义场景。 请务必在此处创建拉取请求和问题,以便我们继续改进 ROS 中的安全支持!