设置安全性

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

教程级别: 高级

时间: 15分钟

背景

sros2 包提供了在 DDS-Security 之上使用 ROS 2 的工具和说明。安全功能已在不同平台(Linux、macOS 和 Windows)以及不同语言(C++ 和 Python)上进行了测试。SROS2 已设计成可与任何安全中间件一起使用,尽管并非所有中间件都是开源的,支持程度取决于正在使用的 ROS 版本。如果遇到任何支持问题,请联系 ROS 2 安全工作组

安装

通常情况下,安装后可以使用 ROS 2安装指南配置指南 来获得安全功能。然而,如果您打算从源代码进行安装或切换中间件实现,请考虑以下注意事项:

从源代码安装

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

sudo apt update
sudo apt install libssl-dev

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

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

选择替代的中间件

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

ROS 2 允许您在运行时更改 DDS 实现。请参阅 如何使用多个 RMW 实现 以探索不同的中间件实现。

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

运行演示

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 设计文档 中有描述。

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

在另一个终端中,执行相同的操作来启动 listener 节点。该终端中的环境变量必须正确设置,如上述第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安全性了吗?请查看 安全的Turtlebot2演示 。您将找到一个功能齐全且复杂的ROS 2安全性实现,可以尝试您自己的定制场景。请务必在此处创建拉取请求和问题,以便我们可以继续改进ROS的安全支持!