您正在阅读的是开发版本的文档。有关最新发布的版本,请访问 Jazzy.
设置安全
目标 设置安全 sros2
.
辅导水平: 高级
时间 15 分钟
背景介绍
"(《世界人权宣言》) sros2
软件包提供了在 DDS-Security 基础上使用 ROS 2 的工具和说明。安全功能已经过跨平台(Linux、macOS 和 Windows)和跨语言(C++ 和 Python)测试。SROS2 可与任何安全中间件配合使用,但并非所有中间件都是开源的,支持情况也因使用的 ROS 发行版而异。请联系 ROS 2 安全工作组 如果您遇到任何支持问题。
安装
通常情况下,在使用 ROS 2 安装指南 和 配置指南.不过,如果您打算从源代码安装或切换中间件实现,请考虑以下注意事项:
从源代码安装
从源代码安装之前,您需要安装最新版本的 openssl(1.0.2g 或更高版本):
苏都 适切 更新 sudo 适切 安装 libssl-dev
酿 安装 opensl
要运行 DDS-Security 演示,您需要在库路径上安装 OpenSSL。运行以下命令,并考虑添加到您的 ~/.bash_profile
:
出口 dyld_library_path=`酿 --前缀 opensl`/lib:$dyld_library_path
出口 openssl_root_dir=`酿 --前缀 opensl`
如果没有安装 OpenSSL,请按照以下步骤操作 本说明
Fast DDS 需要额外的 CMake 标志来构建安全插件,因此需要修改 colcon 调用才能通过:
胶管 构建 --symlink-install --cmake-args -安全=关于
选择备用中间件
如果不使用默认的中间件实现,请确保 更改您的 DDS 实施 然后再继续。
ROS 2 允许您在运行时更改 DDS 实现。请参见 如何与多个 RMW 实施方案协同工作 以探索不同的中间件实现方法。
请注意,不支持供应商之间的安全通信。
运行演示
1.为安全文件创建文件夹
首先创建一个文件夹来存储该演示所需的所有文件:
mkdir ~/sros2_demo
mkdir ~/sros2_demo
医学博士 C:\dev\ros2\sros2_demo
2.生成密钥存储
使用 sros2
工具来创建密钥库。密钥库中的文件将用于确保 ROS 2 图形中所有参与者的安全。
CD ~/sros2_demo ros2 安全 创建关键存储 demo_keystore
CD ~/sros2_demo ros2 安全 创建关键存储 demo_keystore
CD sros2_demo ros2 security create_keystore demo_keystore
3.生成密钥和证书
创建密钥存储后,为每个启用了安全功能的节点创建密钥和证书。在我们的演示中,这包括通话者和监听者节点。该命令使用 创建飞地
功能,下一篇教程将详细介绍该功能。
玫瑰2 安全 创建飞地 demo_keystore /talker_listener/talker ros2 安全 创建飞地 demo_keystore /talker_listener/listener
玫瑰2 安全 创建飞地 demo_keystore /talker_listener/talker ros2 安全 创建飞地 demo_keystore /talker_listener/listener
ros2 security create_enclave demo_keystore /talker_listener/talker ros2 security create_enclave demo_keystore /talker_listener/listener
如果 不能 至 写道 '随机 国家
出现,然后设置环境变量 RANDFILE
.
设置 RANDFILE=C:\dev\ros2\sros2_demo\.rnd
然后重新运行上述命令。
4.配置环境变量
有三个环境变量允许中间件查找加密材料并启用(也可能强制启用)安全性。这些环境变量和其他与安全相关的环境变量在 ROS 2 DDS 安全集成设计文件.
出口 ros_security_keystore=~/sros2_demo/demo_keystore
出口 ros_security_enable=真
出口 安全战略=执行
出口 ros_security_keystore=~/sros2_demo/demo_keystore
出口 ros_security_enable=真
出口 安全战略=执行
设置 ros_security_keystore=%cd%/demo_keystore
设置 ros_security_enable=真
设置 安全战略=执行
这些变量需要在用于演示的每个终端中定义。为方便起见,您可以将它们添加到启动环境中。
5.运行 说者/听者
演示
启动通话节点,开始演示。
玫瑰2 运行 演示节点 话匣子 --ros-args --飞地 /talker_listener/talker
在另一个终端,以同样的方式启动 听众
节点。该终端中的环境变量必须按照上文第 4 步所述正确设置。
玫瑰2 运行 演示节点 听众 --ros-args --飞地 /talker_listener/listener
这些节点将使用身份验证和加密技术进行通信!如果查看数据包内容(例如,使用 tcpdump
或 Wireshark
在另一个教程中涉及),可以看到信息是加密的。
注意:您可以在 C++ (demo_nodes_cpp) 和 Python (demo_nodes_py) 软件包之间任意切换。
这些节点之所以能够通信,是因为我们为它们创建了相应的密钥和证书。
在回答下面的问题时,让两个节点都处于运行状态。
参加测验
打开另一个终端会话,但 别 设置环境变量,以便不启用安全性。启动监听器。你希望发生什么?
监听器启动,但不会收到任何信息。所有流量都经过加密,如果没有启用安全功能,监听器不会收到任何信息。
停止监听器,设置环境变量 ros_security_enable
至 真
并重新启动监听器。您希望这次会有什么结果?
监听器仍能启动,但无法接收信息。虽然现在已经启用了安全机制,但由于 ROS 无法找到密钥文件,因此安全机制配置不当。监听器启动,但由于未执行安全性,因此处于非安全模式,这意味着虽然正确配置的通话者正在发送加密信息,但监听器却无法解密。
停止监听器并设置 安全战略
至 执行
.现在怎么办?
监听器无法启动。已启用并正在执行安全性。由于仍未正确配置,因此会抛出错误,而不是以非安全模式启动。
了解更多信息!
您准备好进一步加强 ROS 安全性了吗?看看 安全的 Turtlebot2 演示.您会发现 ROS 2 安全功能的复杂实现,您可以随时尝试自己的自定义场景。请务必在此创建拉取请求和问题,以便我们继续改进 ROS 的安全支持!