设置安全性
目标: 使用“sros2”设置安全性。
教程级别: 高级
时间: 15 分钟
背景
sros2
软件包提供了在 DDS-Security 上使用 ROS 2 的工具和说明。
安全功能已在各个平台(Linux、macOS 和 Windows)以及不同语言(C++ 和 Python)上进行了测试。
SROS2 旨在与任何安全中间件配合使用,但并非所有中间件都是开源的,并且支持因使用的 ROS 发行版而异。
安装
通常在使用 ROS 2 安装指南 和 配置指南 安装后即可获得安全性。 但是,如果您打算从源代码安装或切换中间件实现,请考虑以下注意事项:
从源代码安装
在从源代码安装之前,您需要安装最新版本的 openssl(1.0.2g 或更高版本):
sudo apt update
sudo apt install libssl-dev
brew install openssl
You will need to have OpenSSL on your library path to run DDS-Security demos.
Run the following command, and consider adding to your ~/.bash_profile
:
export DYLD_LIBRARY_PATH=`brew --prefix openssl`/lib:$DYLD_LIBRARY_PATH
export OPENSSL_ROOT_DIR=`brew --prefix openssl`
If you don’t have OpenSSL installed, please follow these instructions
Fast DDS 需要额外的 CMake 标志来构建安全插件,因此需要修改 colcon 调用以传递:
colcon build --symlink-install --cmake-args -DSECURITY=ON
选择备用中间件
如果您选择不使用默认中间件实现,请务必在继续之前:doc:更改您的 DDS 实现。
ROS 2 允许您在运行时更改 DDS 实现。 请参阅`如何使用多个 RMW 实现 <../../../How-To-Guides/Working-with-multiple-RMW-implementations>` 以探索不同的中间件实现。
请注意,不支持供应商之间的安全通信。
运行演示
1. 为安全文件创建一个文件夹
首先创建文件夹来存储此演示所需的所有文件:
mkdir ~/sros2_demo
mkdir ~/sros2_demo
md C:\dev\ros2\sros2_demo
2. 生成密钥库
使用 sros2
实用程序创建密钥库。
密钥库中的文件将用于为 ROS 2 图表中的所有参与者启用安全性。
cd ~/sros2_demo
ros2 security create_keystore demo_keystore
cd ~/sros2_demo
ros2 security create_keystore demo_keystore
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
ros2 security create_enclave demo_keystore /talker_listener/talker
ros2 security create_enclave demo_keystore /talker_listener/listener
ros2 security create_enclave demo_keystore /talker_listener/talker
ros2 security create_enclave demo_keystore /talker_listener/listener
If unable to write 'random state'
appears then set the environment variable RANDFILE
.
set RANDFILE=C:\dev\ros2\sros2_demo\.rnd
Then re-run the commands above.
4. 配置环境变量
三个环境变量允许中间件定位加密材料并启用(并可能强制执行)安全性。 这些和其他与安全相关的环境变量在 ROS 2 DDS-Security Integration design document.
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
set ROS_SECURITY_KEYSTORE=%cd%/demo_keystore
set ROS_SECURITY_ENABLE=true
set ROS_SECURITY_STRATEGY=Enforce
这些变量需要在用于演示的每个终端中定义。 为了方便起见,您可以将它们添加到启动环境中。
5. 运行``talker/listener``演示
通过启动 talker 节点开始演示。
ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker
在另一个终端中,执行相同操作以启动“侦听器”节点。 必须按照上面步骤 4 的说明正确设置此终端中的环境变量。
ros2 run demo_nodes_py listener --ros-args --enclave /talker_listener/listener
这些节点将使用身份验证和加密进行通信! 如果您查看数据包内容(例如,使用另一个教程中介绍的“tcpdump”或“Wireshark”),则可以看到消息已加密。
注意:您可以任意在 C++(demo_nodes_cpp)和 Python(demo_nodes_py)包之间切换。
这些节点能够进行通信,因为我们为它们创建了适当的密钥和证书。
在回答以下问题时,让两个节点保持运行。
参加测验!
Open another terminal session, but do not set the environment variables so that security is not enabled. Start the listener. What do you expect to happen?
The listener launches but does not receive any messages. All traffic is encrypted, and without security enabled the listener does not receive anything.
Stop the listener, set the environment variable ROS_SECURITY_ENABLE
to true
and start the listener again.
What results do you expect this time?
The listener still launches but does not receive messages. Although security has now been enabled, it is not been configured properly since ROS is unable to locate the key files. The listener launches, but in non-secure mode since security is not enforced, which means that although the properly configured talker is sending encrypted messages, this listener is unable to decrypt them.
Stop the listener and set ROS_SECURITY_STRATEGY
to Enforce
.
What happens now?
The listener fails to launch. Security has been enabled and is being enforced. Since it still is not properly configured, an error is thrown rather than launching in non-secure mode.
了解更多!
您准备好进一步了解 ROS 安全性了吗? 请查看 Secure Turtlebot2 Demo。 您将找到 ROS 2 安全性的功能齐全且复杂的实现,随时可以尝试您自己的自定义场景。 请务必在此处创建拉取请求和问题,以便我们继续改进 ROS 中的安全支持!