【ROS2】高级:安全-设置安全性

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

教程级别:高级

时间:15 分钟

内容

  • 背景

  • 安装

    • 从源代码安装

    • 选择替代中间件

  • 运行演示

      1. 为安全文件创建一个文件夹
      1. 生成密钥库
      1. 生成密钥和证书
      1. 配置环境变量
      1. 运行 talker/listener 演示
  • 参加测验!

  • 了解更多!

背景

sros2 包提供了在 DDS-Security 之上使用 ROS 2 的工具和说明 。安全功能已在各个平台(Linux、macOS 和 Windows)以及不同语言(C++ 和 Python)中进行了测试。SROS2 旨在与任何安全中间件一起使用,尽管并非所有中间件都是开源的,并且支持因使用的 ROS 发行版而异。如果遇到任何支持问题,请联系 ROS 2 安全工作组。https://docs.ros.org/en/jazzy/The-ROS2-Project/Governance/Working-Groups.html#security-working-group

安装

通常在使用 ROS 2 安装指南https://docs.ros.org/en/jazzy/Installation.html 和配置指南https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.html 进行安装后即可获得安全性。但是,如果您打算从源代码安装或切换中间件实现,请考虑以下注意事项:

从源代码安装(compile Fast DDS)

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

properties 复制代码
sudo apt update
sudo apt install libssl-dev

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

apache 复制代码
colcon build --symlink-install --cmake-args -DSECURITY=ON
sql 复制代码
cxy@cxy-Ubuntu2404:~/ros2_jazzy$ sudo apt update
cxy@cxy-Ubuntu2404:~/ros2_jazzy$ sudo apt install libssl-dev
cxy@cxy-Ubuntu2404:~/ros2_jazzy$ colcon build --symlink-install --cmake-args -DSECURITY=ON

选择替代的中间件

如果您选择不使用默认的中间件实现,请务必在继续之前更改您的 DDS 实现 https://docs.ros.org/en/jazzy/Installation/DDS-Implementations.html

properties 复制代码
Ubuntu Linux 源代码安装
# 1. RTI Connext(版本 6.0.1,仅 amd64)
ROS 2 apt 仓库中提供的 Debian 软件包
您可以安装在 ROS 2 apt 仓库中提供的 RTI Connext 的 Debian 软件包。您需要接受 RTI 的许可。


sudo apt update && sudo apt install -q -y rti-connext-dds-6.0.1


源设置文件以设置 NDDSHOME 环境变量。
cd /opt/rti.com/rti_connext_dds-6.0.1/resource/scripts && source ./rtisetenv_x64Linux4gcc7.3.0.bash; cd -
注意:使用 zsh 时,您需要位于脚本所在的目录中,以便正确运行


现在您可以正常构建,并且对 RTI 的支持也将被构建。






# 2. 来自 RTI 的官方二进制软件包
您可以通过大学、购买或评估提供的选项,安装由 RTI 提供的 Linux 版 Connext 6.0.1 软件包。


下载后,在 .run 可执行文件上使用 chmod +x ,然后执行它。请注意,如果您要安装到系统目录,请同时使用 sudo 。


默认位置是 ~/rti_connext_dds-6.0.1


安装后,运行 RTI 启动器并指向您的许可证文件(从 RTI 获得)。


将以下行添加到您的 .bashrc 文件中,指向您的许可证副本。
export RTI_LICENSE_FILE=path/to/rti_license.dat


请获取安装文件以设置 NDDSHOME 环境变量。
cd ~/rti_connext_dds-6.0.1/resource/scripts && source ./rtisetenv_x64Linux4gcc7.3.0.bash; cd - 
现在您可以像往常一样构建,并且还将构建对 RTI 的支持。




Ubuntu Linux 二进制安装


RTI Connext(版本 6.0.1,仅 amd64)
要使用 RTI Connext DDS,有适用于大学、购买或评估的全套安装选项,或者您可以安装 RTI Connext 6.0.1 的仅库 Debian 软件包,该软件包可从 OSRF Apt 存储库中获得,且在非商业许可下使用。


要安装仅包含库的 Debian 软件包:
sudo apt update && sudo apt install -q -y rti-connext-dds-6.0.1


您需要接受 RTI 的许可协议,并在安装中找到一个'rti_license.dat'文件。


将以下行添加到您的 .bashrc 文件中,指向您的许可证副本(并引用它)。
export RTI_LICENSE_FILE=path/to/rti_license.dat


所有选项都需要您获取安装文件以设置 NDDSHOME 环境变量
cd /opt/rti.com/rti_connext_dds-6.0.1/resource/scripts && source ./rtisetenv_x64Linux4gcc7.3.0.bash; cd - 


注意:以上内容可能需要修改以匹配您的 RTI 安装位置


如果您想安装 Connext DDS-Security 插件,请参阅此页面。https://docs.ros.org/en/jazzy/Installation/DDS-Implementations/Install-Connext-Security-Plugins.html

ROS 2 允许您在运行时更改 DDS 实现。了解如何使用多个 RMW 实现来探索不同的中间件实现。https://docs.ros.org/en/jazzy/How-To-Guides/Working-with-multiple-RMW-implementations.html

请注意,不支持(不同中间件)供应商之间的安全通信

运行演示

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

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

Linux:

nginx 复制代码
mkdir ~/sros2_demo

2. 生成密钥库

使用 sros2 工具创建密钥库。密钥库中的文件将用于为 ROS 2 graph 中的所有参与者启用安全性。

Linux:

properties 复制代码
cd ~/sros2_demo
ros2 security create_keystore demo_keystore

3. 生成密钥和证书

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

properties 复制代码
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

Linux:

javascript 复制代码
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce

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

5. 运行 talker/listener 演示

启动 talker 节点以开始演示。

nginx 复制代码
ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker

在另一个终端中,执行相同的操作以启动 listener 节点。此终端中的环境变量必须按照上述步骤 4 中的描述正确设置。

nginx 复制代码
ros2 run demo_nodes_py listener --ros-args --enclave /talker_listener/listener

这些节点将使用身份验证和加密进行通信!如果你查看数据包内容(例如,使用 tcpdumpWireshark ,如在另一个教程中所述),你可以看到消息是加密的。

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

**这些节点之所以能够通信,是因为我们为它们创建了适当的密钥和证书。**在回答以下问题时,请保持两个节点运行。

参加测验!

问题 1

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

答案1: 监听器启动了,但没有接收到任何消息。所有流量都是加密的,如果没有启用安全功能,监听器什么也接收不到。

问题 2

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

答案2:监听器仍然启动,但无法接收消息。尽管现在已经启用了安全性,但由于 ROS 无法找到密钥文件,因此未正确配置安全性 。监听器启动,但由于未强制执行安全性,因此以非安全模式启动,这意味着尽管正确配置的发言者正在发送加密消息,但此监听器无法解密这些消息。

问题 3

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

答案3:监听器启动失败。安全功能已经被启用并正在强制执行。由于它仍然没有被正确配置 ,系统会抛出错误而不是以非安全模式启动。

了解更多!

你准备好进一步了解 ROS 安全性了吗?看看Secure Turtlebot2 演示 https://github.com/ros-swg/turtlebot3_demo 。你会发现一个功能齐全且复杂的 ROS 2 安全性实现,准备好尝试你自己的自定义场景。请务必在此处创建拉取请求和问题,以便我们继续改进 ROS 的安全支持!

相关推荐
liuxin334455663 小时前
学籍管理系统:实现教育管理现代化
java·开发语言·前端·数据库·安全
weixin_442643426 小时前
FileLink为企业打造了一站式的跨网安全文件共享解决方案
安全·filelink内外网文件交换
一只栖枝7 小时前
Security知识点分享之高级安全安装虚拟机
安全·安全架构
cnsinda_sdc7 小时前
信创数据防泄漏中信创沙箱是什么样的安全方案
运维·网络·安全·源代码管理·源代码防泄密·源代码加密
黑客Ela7 小时前
【网络安全设备系列】7、流量监控设备
安全·web安全
hao_wujing9 小时前
网络安全等级自我评价
安全·web安全
ly21st9 小时前
elasticsearch安全认证
安全·elasticsearch
cdprinter10 小时前
涉密行业跨网数据摆渡,光盘审计刻录输出,生产音视频刻录,电子档案长期保存应用
安全·自动化·音视频
daopuyun11 小时前
GB/T34944-2017 《Java语言源代码漏洞测试规范》解读——安全功能
java·开发语言·安全
群联云防护小杜12 小时前
服务器被攻击怎么办
运维·服务器·网络·网络协议·安全·web安全