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

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

 教程级别:高级

 时间:15 分钟

 内容

  •  背景

  •  安装

    •  从源代码安装

    • 选择替代中间件

  •  运行演示

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

    • 2. 生成密钥库

    • 3. 生成密钥和证书

    • 4. 配置环境变量

    • 5. 运行 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 或更高版本):

sudo apt update
sudo apt install libssl-dev

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

3a9e8ccb039b8e47c830d09a40e4759a.png

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

6a1b27be984e8bea8d53771758b662f1.png

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

366bf7de21eec8ca932078e75d13f9c7.png

选择替代的中间件

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

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

1ded511b543955ef1fb6981b62f97675.png

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

运行演示 

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

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

Linux: 

mkdir ~/sros2_demo

2. 生成密钥库

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

Linux:

cd ~/sros2_demo
ros2 security create_keystore demo_keystore

56754d846309eff2d28c1bdc8a592cbd.png

e04734577155d3ca7e971cef87a60c93.png

3. 生成密钥和证书

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

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

be3ba1c0b69e4b5ebf645edb33a10fd9.png

4. 配置环境变量

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

b51343eca225e883e1499f6b5d3be20c.png

Linux:

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

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

63150b96b1d8bb87112fe44a8875a635.png

5. 运行 talker/listener 演示 

启动 talker 节点以开始演示。

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

8e5618520c367f75c9fdb803d03a1098.png

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

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

7fe7937056d9493ca309466ba553851b.png

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

注意:您可以任意切换 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 的安全支持!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值