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

news2024/9/20 20:46:55

目标:使用 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 的安全支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一起搭WPF界面之MVVM架构的简单搭建

一起搭WPF界面之MVVM架构的简单搭建 1 前言2 创建项目2.1新建项目2.2WPF2.3创建完成 3 MVVM划分3.1 划分逻辑3.2文件夹创建3.3文件创建3.3.1 Views——可在主界面的基础上,划分多个用户控件模块3.3.2 ViewModels——创建数据结构存放的cs文件3.3.3 Models——创建处…

在 VM 虚拟机中安装 openEuler + 桌面

在 VM 虚拟机中安装 openEuler 1 介绍2 步骤语言Root 账户安装位置网络和主机名自动检索到【推荐】手动配置网络 软件选择安装完成登录测试网络curl ip / ping ipip link show / ip a如网络不通,可检查网卡状态和dns配置 安装命令设置以图形界面的方式启动【dde】第…

sql-libs通关详解

1-4关 1.第一关 我们输入?id1 看回显,通过回显来判断是否存在注入,以及用什么方式进行注入,直接上图 可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。联合查询原理简单说一下&…

PyTorch之ResNet101模型与示例

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 ResNet101模型 ResNet101是一种深度残差网络,它是ResNet系列中的一种,下面详解ResNet101网络结构。 ResNet101网络结构中有101层,其中第一层是77的卷积层,然后是4个…

Nacos 配置中心配置加载源码分析

前言:上一篇我们分析 Nacos 配置中心服务端源码的时候,多次看到有去读取本地配置文件,那本地配置文件是何时加载的?本篇我们来进行详细分析。 Nacos 系列文章传送门: Nacos 初步认识和 Nacos 部署细节 Nacos 配置管…

https改造-python https 改造

文章目录 前言https改造-python https 改造1.1. https 配置信任库2. 客户端带证书https发送,、服务端关闭主机、ip验证 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每…

遗传算法与深度学习实战——进化深度学习

遗传算法与深度学习实战——进化深度学习 0. 前言1. 进化深度学习1.1 进化深度学习简介1.2 进化计算简介 2. 进化深度学习应用场景3. 深度学习优化3.1 优化网络体系结构 4. 通过自动机器学习进行优化4.1 自动机器学习简介4.2 AutoML 工具 5. 进化深度学习应用5.1 模型选择&…

Java给定一些元素随机从中选择一个

文章目录 代码实现java.util.Random类实现随机取数(推荐)java.util.Collections实现(推荐)Java 8 Stream流实现(不推荐) 完整代码参考(含测试数据) 在Java中,要从给定的数据集合中随机选择一个元素,我们很容易想到可以使用 java.…

【Stable Diffusion】(基础篇四)—— 模型

模型 本系列博客笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 本文主要讲解如何下载和使…

C++【泛型编程】【string类常用接口】学习

目录 泛型编程 推演实例化 显示实例化 类模板 类模板的声明和定义分离 STL string string的构造和拷贝构造 选取特定字符串拷贝 解析: 关于npos的解析 验证 从一个字符串中拷贝前几个字符 解析: 注意: 验证: size…

AI应用行业落地100例 | 移民公司Envoy Global引入AI员工赋能,效率飙升80%,开启服务新篇章

《AI应用行业落地100例》专题汇集了人工智能技术在金融、医疗、教育、制造等多个关键行业中的100个实际应用案例,深入剖析了AI如何助力行业创新、提升效率,并预测了技术发展趋势,旨在为行业决策者和创新者提供宝贵的洞察和启发。 Envoy Globa…

Pytorch使用教学2-Tensor的维度

在PyTorch使用的过程中,维度转换一定少不了。而PyTorch中有多种维度形变的方法,我们该在什么场景下使用什么方法呢? 本小节我们使用的张量如下: # 一维向量 t1 torch.tensor((1, 2)) # 二维向量 t2 torch.tensor([[1, 2, 3], …

【Unity PC端打包exe封装一个并添加安装引导】

Unity PC端打包exe封装一个并添加安装引导 比特虫在线制作ico图标ico图标转换工具 选中打包出来的所有文件和ico图标 右键 使用RAR软件 添加到压缩文件 两个名称要相同 设置完点击确认等待压缩完成 然后就可以使用 Smart Install Maker制作引导安装程序了

Matlab进阶绘图第64期—三维分组针状图

三维分组针状图可以看作是三维分组散点图的升级,能够直观地展示各组分、各元素的位置、对比情况。 由于Matlab中未收录三维分组针状图的绘制函数,因此需要大家自行设法解决。 本文使用自制的groupedstem3小工具进行三维分组针状图的绘制,先…

数据结构之深入理解简单选择排序:原理、实现与示例(C,C++)

文章目录 一、简单选择排序原理二、C/C代码实现总结: 在计算机科学中,排序算法是一种非常基础且重要的算法。简单选择排序(Selection Sort)作为其中的一种,因其实现简单、易于理解而受到许多初学者的喜爱。本文将详细介…

Maven概述

目录 1.Maven简介 2.Maven开发环境搭建 2.1下载Maven服务器 2.2安装,配置Maven 1.配置本地仓库地址 2.配置阿里云镜像地址 2.3在idea中配置maven 2.4在idea中创建maven项目 3.pom.xml配置 1.项目基本信息 2.依赖信息 3.构建信息 4.Maven命令 5.打包Jav…

华杉研发九学习日记17 正则表达式 异常

华杉研发九学习日记17 一,正则表达式 ^ $ 作用: 测试字符串内的模式(匹配) 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证. 替换文本(替换》 可以使用正则表达式来…

知识工程经典语言 PROLOG基本介绍

定义 PROLOG语言是一种基于Horn子句的逻辑型程序设计语言&#xff0c;也是一种陈述性语言。 PROLOG的语句 PROLOG语言仅有三种语句&#xff0c;称为事实、规则和问题。 事实 格式 <谓词名>(<项表>). 其中谓词名是以小写英文字母开头的字母、数字、下划线等组成的…

使用js实现常见的数据结构---链表,队列,栈,树

注&#xff1a;本文只作为数据结构的实现参考和个人理解 链表 链表是由多个节点&#xff08;node&#xff09;连接起来的&#xff0c;每个节点包含了一些存储的数据和指向下一个节点的指针&#xff0c; 链表&#xff1a;多个连续的节点构成&#xff0c;节点&#xff1a;包含一…

spring-boot3.x整合Swagger 3 (OpenAPI 3) +knife4j

1.简介 OpenAPI阶段的Swagger也被称为Swagger 3.0。在Swagger 2.0后&#xff0c;Swagger规范正式更名为OpenAPI规范&#xff0c;并且根据OpenAPI规范的版本号进行了更新。因此&#xff0c;Swagger 3.0对应的就是OpenAPI 3.0版本&#xff0c;它是Swagger在OpenAPI阶段推出的一个…