【ROS2】高级:安全-理解安全密钥库

news2024/11/15 18:04:39

目标:探索位于 ROS 2 安全密钥库中的文件。

 教程级别:高级

 时间:15 分钟

 内容

  •  背景

  • 安全工件位置

    •  公钥材料

    •  私钥材料

    • 域治理政策

    •  安全飞地

  •  参加测验!

 背景 

在继续之前,请确保您已完成设置安全教程。

sros2 包可以用来创建启用 ROS 2 安全性所需的密钥、证书和策略。然而,安全配置非常灵活。对 ROS 2 安全密钥库的基本理解将允许与现有的 PKI(公钥基础设施)集成,并根据组织政策管理敏感密钥材料。

安全工件位置

之前的教程中启用通信安全后,让我们来看看启用安全性时创建的文件。这些文件使加密成为可能。

cxy@cxy-Ubuntu2404:~/sros2_demo$ sudo apt install tree
cxy@cxy-Ubuntu2404:~/sros2_demo$ tree
.
└── demo_keystore
    ├── enclaves
    │   ├── governance.p7s
    │   ├── governance.xml
    │   └── talker_listener
    │       ├── listener
    │       │   ├── cert.pem
    │       │   ├── governance.p7s -> ../../governance.p7s
    │       │   ├── identity_ca.cert.pem -> ../../../public/identity_ca.cert.pem
    │       │   ├── key.pem
    │       │   ├── permissions_ca.cert.pem -> ../../../public/permissions_ca.cert.pem
    │       │   ├── permissions.p7s
    │       │   └── permissions.xml
    │       └── talker
    │           ├── cert.pem
    │           ├── governance.p7s -> ../../governance.p7s
    │           ├── identity_ca.cert.pem -> ../../../public/identity_ca.cert.pem
    │           ├── key.pem
    │           ├── permissions_ca.cert.pem -> ../../../public/permissions_ca.cert.pem
    │           ├── permissions.p7s
    │           └── permissions.xml
    ├── private
    │   ├── ca.key.pem
    │   ├── identity_ca.key.pem -> ca.key.pem
    │   └── permissions_ca.key.pem -> ca.key.pem
    └── public
        ├── ca.cert.pem
        ├── identity_ca.cert.pem -> ca.cert.pem
        └── permissions_ca.cert.pem -> ca.cert.pem


8 directories, 22 files

c89ea15f12e7749d4c42da826f1e758b.png

sros2 实用程序 ( ros2 security ... ) 将文件分为公共、私有和飞地密钥材料

ROS 使用由环境变量 ROS_SECURITY_KEYSTORE 定义的目录作为密钥库。在本教程中,我们使用目录 ~/sros2_demo/demo_keystore 。

公钥材料

您将在 ~/sros2_demo/demo_keystore/public 的公共目录中找到三个加密证书;然而,身份和权限证书实际上只是指向证书颁发机构(CA)证书的链接

在公钥基础设施中,证书颁发机构充当信任锚:它验证参与者的身份和权限。对于 ROS,这意味着所有参与 ROS 图的节点(可能扩展到整个单机器人舰队)。通过将证书颁发机构的证书( ca.cert.pem )放置在机器人上的适当位置,所有 ROS 节点都可以使用相同的证书颁发机构与其他节点建立相互信任。

虽然在我们的教程中我们会即时创建证书颁发机构,但在生产系统中,这应该根据预定义的安全计划进行。通常,生产系统的证书颁发机构将离线创建,并在初始设置期间放置在机器人上。它可能是每个机器人独有的,或者在一群机器人之间共享,所有这些机器人都旨在相互信任。

DDS(以及扩展的 ROS)支持身份和权限信任链的分离,因此每个功能都有自己的证书颁发机构。在大多数情况下,ROS 系统安全计划不需要在这些职责之间进行分离,因此安全实用程序生成一个用于身份和权限的单一证书颁发机构。

使用 openssl 查看此 x509 证书并将其显示为文本:

cd ~/sros2_demo/demo_keystore/public
openssl x509 -in ca.cert.pem -text -noout

输出应类似于以下内容: 

3ebc9337025db5a6bdf718aaf160924d.png

Certificate:
  Data:
      Version: 3 (0x2)
      Serial Number:
          02:8e:9a:24:ea:10:55:cb:e6:ea:e8:7a:c0:5f:58:6d:37:42:78:aa
      Signature Algorithm: ecdsa-with-SHA256
      Issuer: CN = sros2CA
      Validity
          Not Before: Jun  1 16:57:37 2021 GMT
          Not After : May 31 16:57:37 2031 GMT
      Subject: CN = sros2CA
      Subject Public Key Info:
          Public Key Algorithm: id-ecPublicKey
              Public-Key: (256 bit)
              pub:
                  04:71:e9:37:d7:32:ba:b8:a0:97:66:da:9f:e3:c4:
                  08:4f:7a:13:59:24:c6:cf:6a:f7:95:c5:cd:82:c0:
                  7f:7f:e3:90:dd:7b:0f:77:d1:ee:0e:af:68:7c:76:
                  a9:ca:60:d7:1e:2c:01:d7:bc:7e:e3:86:2a:9f:38:
                  dc:ed:39:c5:32
              ASN1 OID: prime256v1
              NIST CURVE: P-256
      X509v3 extensions:
          X509v3 Basic Constraints: critical
              CA:TRUE, pathlen:1
  Signature Algorithm: ecdsa-with-SHA256
       30:45:02:21:00:d4:fc:d8:45:ff:a4:51:49:98:4c:f0:c4:3f:
       e0:e7:33:19:8e:31:3c:d0:43:e7:e9:8f:36:f0:90:18:ed:d7:
       7d:02:20:30:84:f7:04:33:87:bb:4f:d3:8b:95:61:48:df:83:
       4b:e5:92:b3:e6:ee:3c:d5:cf:30:43:09:04:71:bd:dd:7c
  • 关于此 CA 证书的一些注意事项:

    • 证书主题名称 sros2CA 是 sros2 实用程序提供的默认名称

    • 此证书自创建之日起有效期为十年

    • 像所有证书一样,这包含用于公私钥加密的公钥

    • 作为根证书颁发机构,这是一个自签名证书 https://en.wikipedia.org/wiki/Self-signed_certificate ;即,它是使用自己的私钥签名的。

由于这是一个公共证书,因此可以根据需要自由复制,以在整个 ROS 系统中建立信任。

私钥材料

私钥材料可以在密钥库目录 ~/sros2_demo/demo_keystore/private 中找到。与 public 目录类似,其中包含一个证书颁发机构密钥 ca.key.pem 及其符号链接,用作身份和权限 CA 私钥。

 警告

保护此私钥并创建其安全备份!

这是与公共证书颁发机构相关的私钥,它作为您 ROS 系统中所有安全性的锚点。您将使用它来修改 ROS 图的加密策略并添加新的 ROS 参与者。根据您的机器人安全需求,可以通过访问权限保护密钥并将其锁定到另一个帐户,或者可以将其完全移出机器人并移到另一个系统或设备上如果文件丢失,您将无法更改访问权限并向系统添加新参与者。同样,任何拥有文件访问权限的用户或进程都可以修改系统策略和参与者。

此文件仅用于配置机器人,但机器人运行时不需要。它可以安全地离线存储在另一个系统或可移动介质中。

sros2 实用程序使用椭圆曲线密码术而不是 RSA,以提高安全性并减少密钥大小。使用以下命令显示有关此椭圆曲线私钥的详细信息:

cd ~/sros2_demo/demo_keystore/private
openssl ec -in ca.key.pem -text -noout

cd85bc8774d27b9cea6a713e9dde6ecf.png

您的输出应类似于以下内容: 

read EC key
Private-Key: (256 bit)
priv:
    93:da:76:b9:e3:91:ab:e9:42:76:f2:38:f1:9d:94:
    90:5e:b5:96:7b:7f:71:ee:13:1b:d4:a0:f9:48:fb:
    ae:77
pub:
    04:71:e9:37:d7:32:ba:b8:a0:97:66:da:9f:e3:c4:
    08:4f:7a:13:59:24:c6:cf:6a:f7:95:c5:cd:82:c0:
    7f:7f:e3:90:dd:7b:0f:77:d1:ee:0e:af:68:7c:76:
    a9:ca:60:d7:1e:2c:01:d7:bc:7e:e3:86:2a:9f:38:
    dc:ed:39:c5:32
ASN1 OID: prime256v1
NIST CURVE: P-256

除了私钥本身,请注意列出了公钥,并且它与证书颁发机构 ca.cert.pem 中列出的公钥匹配。

域治理政策

在密钥库的飞地目录中找到域治理策略, ~/sros2_demo/demo_keystore/enclaves 。 enclave 目录包含 XML 治理策略文档 governance.xml ,以及由权限 CA 签署的文档副本 governance.p7s 。

governance.p7s 文件包含域范围的设置,例如如何处理未经身份验证的参与者、是否加密发现以及访问主题的默认规则。

使用以下命令验证治理文件的 S/MIME 签名:

openssl smime -verify -in governance.p7s -CAfile ../public/permissions_ca.cert.pem

ec6483793bc03fbb09267e7ef48388b1.png

 a32b6cc8e9b8ac0a8e8389272d1b3e55.png

安全飞地

安全进程(通常是 ROS 节点)在安全飞地内运行。在最简单的情况下,所有进程可以合并到同一个飞地中,所有进程将使用相同的安全策略。然而,为了对不同的进程应用不同的策略,可以在启动时使用不同的安全飞地。有关安全飞地的更多详细信息,请参阅设计文档https://design.ros2.org/articles/ros2_security_enclaves.html 。运行节点时,通过使用 ROS 参数 --enclave 来指定安全飞地。

每个安全飞地需要六个文件才能启用安全性。每个文件必须按下文定义的名称命名,并按照 DDS 安全标准中的规定进行命名。为了避免拥有多个相同文件的副本, sros2 实用程序为每个飞地创建到单个治理策略、身份 CA 和权限 CA 的链接。

1e19bbef9da71c20335dce7754626b57.png

请参阅 listener 飞地内的以下六个文件。三个是特定于此飞地的,而三个是此 ROS 系统的通用文件:

  • key.pem ,用于在此飞地内加密和解密的私钥

  • cert.pem ,此飞地的公共证书;此证书已由身份 CA 签署

  • permissions.p7s ,此飞地的权限;此文件已由权限 CA 签名

  • governance.p7s ,此域的已签署安全策略文件的链接

  • identity_ca.cert.pem, 此域的身份 CA 链接

  • permissions_ca.cert.pem ,此域的权限 CA 链接

私钥 key.pem 应根据您的安全计划进行保护。此密钥用于加密、解密和验证此特定飞地内的通信。如果密钥丢失或被盗,请撤销该密钥并为此飞地创建一个新身份。

该目录中还创建了文件 permissions.xml ,可用于重新创建签名的权限文件。但是,由于 DDS 使用的是文件的签名版本,因此不需要此文件来启用安全性。

参加测验!

看看你能否回答这些关于 ROS 安全密钥库的问题。首先,打开一个新的终端会话,并启用在前面的教程中创建的密钥库的安全性

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


cd ~/sros2_demo/demo_keystore/enclaves/talker_listener/listener

在开始之前,请先备份 permissions.p7s 

MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg="sha-256"; boundary="===============1982425736132065620=="


This is an S/MIME signed message


--===============1982425736132065620==
Content-Type: text/plain


<dds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.omg.org/spec/DDS-SECURITY/20170901/omg_shared_ca_permissions.xsd">
  <permissions>
    <grant name="/talker_listener/listener">
      <subject_name>CN=/talker_listener/listener</subject_name>
      <validity>
        <not_before>2024-07-19T03:38:43</not_before>
        <not_after>2034-07-18T03:38:43</not_after>
      </validity>
      <allow_rule>
        <domains>
          <id>0</id>
        </domains>
        <publish>
          <topics>
            <topic>rq/*/_action/cancel_goalRequest</topic>
            <topic>rq/*/_action/get_resultRequest</topic>
            <topic>rq/*/_action/send_goalRequest</topic>
            <topic>rq/*Request</topic>
            <topic>rr/*/_action/cancel_goalReply</topic>
            <topic>rr/*/_action/get_resultReply</topic>
            <topic>rr/*/_action/send_goalReply</topic>
            <topic>rt/*/_action/feedback</topic>
            <topic>rt/*/_action/status</topic>
            <topic>rr/*Reply</topic>
            <topic>rt/*</topic>
          </topics>
        </publish>
        <subscribe>
          <topics>
            <topic>rq/*/_action/cancel_goalRequest</topic>
            <topic>rq/*/_action/get_resultRequest</topic>
            <topic>rq/*/_action/send_goalRequest</topic>
            <topic>rq/*Request</topic>
            <topic>rr/*/_action/cancel_goalReply</topic>
            <topic>rr/*/_action/get_resultReply</topic>
            <topic>rr/*/_action/send_goalReply</topic>
            <topic>rt/*/_action/feedback</topic>
            <topic>rt/*/_action/status</topic>
            <topic>rr/*Reply</topic>
            <topic>rt/*</topic>
          </topics>
        </subscribe>
      </allow_rule>
      <allow_rule>
        <domains>
          <id>0</id>
        </domains>
        <publish>
          <topics>
            <topic>ros_discovery_info</topic>
          </topics>
        </publish>
        <subscribe>
          <topics>
            <topic>ros_discovery_info</topic>
          </topics>
        </subscribe>
      </allow_rule>
      <default>DENY</default>
    </grant>
  </permissions>
</dds>


--===============1982425736132065620==
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"


MIICsAYJKoZIhvcNAQcCoIICoTCCAp0CAQExDzANBglghkgBZQMEAgEFADALBgkq
hkiG9w0BBwGgggE/MIIBOzCB4qADAgECAhR8Qa0j+Lrcm8xeZkyz9p/bZMWhVzAK
BggqhkjOPQQDAjASMRAwDgYDVQQDDAdzcm9zMkNBMB4XDTI0MDcxOTAzMjQxNFoX
DTM0MDcxODAzMjQxNFowEjEQMA4GA1UEAwwHc3JvczJDQTBZMBMGByqGSM49AgEG
CCqGSM49AwEHA0IABPMaf1j/SYjdKa+wt8L7SPedfo1UR2bEm0MoUKU8Yaiep+AC
1Uwaza61Gsvuq68t+3gy+i75zwwkj76n+77PV8ejFjAUMBIGA1UdEwEB/wQIMAYB
Af8CAQEwCgYIKoZIzj0EAwIDSAAwRQIhALNRE/bqkCIvf1xD3E8s/1HqS1FY4Q31
dX+C9FMYNn+ZAiBHNtYoBAmu8lU6/+Ux+26wBdKEf+PEJs45EtgNd08UDDGCATUw
ggExAgEBMCowEjEQMA4GA1UEAwwHc3JvczJDQQIUfEGtI/i63JvMXmZMs/af22TF
oVcwDQYJYIZIAWUDBAIBBQCggZswGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAc
BgkqhkiG9w0BCQUxDxcNMjQwNzIwMDMzODQzWjAvBgkqhkiG9w0BCQQxIgQgkeLS
0XqZO+LEtvmMJumjB+dkzkMPosQzWIvdotfJQ5QwMAYJKoZIhvcNAQkPMSMwIQYJ
YIZIAWUDBAEqBglghkgBZQMEARYGCWCGSAFlAwQBAjAKBggqhkjOPQQDAgRHMEUC
IEcVdGZIK9qOIeMkw5tvyMmIt/UBfqcnMiakwXWBxXMZAiEA+nItvq7n5WkgPHrc
mTBX0DlOac3CwCrv4/aJS32PPN0=


--===============1982425736132065620==--

这个 permissions.p7s 文件是一个 S/MIME 签名的消息,包含了 ROS2 的权限策略。以下是详细解释:

MIME 头部

  • MIME-Version: 1.0:MIME 版本。

  • Content-Type: multipart/signed; protocol=“application/x-pkcs7-signature”; micalg=“sha-256”; boundary=“===============1982425736132065620==”:表示这是一个多部分签名的消息,使用 SHA-256 算法进行签名,边界字符串用于分隔消息的不同部分。

消息内容

  • This is an S/MIME signed message:说明这是一个 S/MIME 签名的消息。

第一部分:权限策略

  • Content-Type: text/plain:内容类型为纯文本。

权限策略 XML

这个 XML 文件定义了 /talker_listener/listener 节点的权限,包括允许发布和订阅的主题,以及权限的有效期。

第二部分:签名

  • Content-Type: application/x-pkcs7-signature; name=“smime.p7s”:内容类型为 PKCS#7 签名。

  • Content-Transfer-Encoding: base64:内容传输编码为 base64。

  • Content-Disposition: attachment; filename=“smime.p7s”:附件的文件名为 smime.p7s

签名内容

这是一个 base64 编码的签名,用于验证上述权限策略的完整性和真实性。

问题 1 

在文本编辑器中打开 permissions.p7s 。对 XML 内容进行微小的更改(例如,添加一个空格或空行)并保存文件。启动监听节点:

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

你期望会发生什么?

你能启动 talker 节点吗?

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

启动监听器和启动说话者之间有什么区别?

答案 1

侦听器无法启动并抛出错误。当 permissions.p7s 文件被修改时——无论多么微小——文件的签名变得无效。当权限文件无效时,节点将无法在启用和强制安全的情况下启动。

326d23390cf17e048812da6ea701027e.png

讲话者将按预期开始。它在不同的飞地中使用 permissions.p7s 文件,并且该文件仍然有效。

 问题 2 

什么命令可以让你检查修改后的 permissions.p7s 文件上的签名是否有效?

答案 2

检查 permissions.p7s 是否已使用 openssl smime 命令由权限 CA 正确签名

openssl smime -verify -in permissions.p7s -CAfile permissions_ca.cert.pem

65ccacd13d2123b0fc0180ba2d998cee.png

3eefee19a01157368b2800470e218716.png

在继续下一个教程之前,请恢复您原始的、正确签名的 permissions.p7s 文件。

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

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

相关文章

vue3在元素上绑定自定义事件弹出虚拟键盘

最近开发中遇到一个需求: 焊接机器人的屏幕上集成web前端网页, 但是没有接入键盘。这就需要web端开发一个虚拟键盘,在网上找个很多虚拟键盘没有特别适合,索性自己写个简单的 图片: 代码: (代码可能比较垃圾冗余,也没时间优化,凑合看吧) 第一步:创建键盘组件 为了方便使用…

鸿蒙 动态共享包HSP的创建和引用

1.什么是动态共享包HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0c;与宿主应…

arinc664总线协议

AFDX总线协议简介 &#xff08;1&#xff09;AFDX的传输速率高&#xff1a;带宽100MHZ&#xff0c;远远高于其他的类型的航空总线。&#xff08;2&#xff09;AFDX网络的鲁棒性高&#xff1a;AFDX的双冗余备份网络可以在某一个网络出现故障时&#xff0c;仍能正常通讯。 其中…

【C语言】结构体详解 -《探索C语言的 “小宇宙” 》

目录 C语言结构体&#xff08;struct&#xff09;详解结构体概览表1. 结构体的基本概念1.1 结构体定义1.2 结构体变量声明 2. 结构体成员的访问2.1 使用点运算符&#xff08;.&#xff09;访问成员输出 2.2 使用箭头运算符&#xff08;->&#xff09;访问成员输出 3. 结构体…

【NPU 系列专栏 2 -- NVIDIA 的 H100 和 H200 是什么?】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NVIDIA H100 和 H200 芯片NVIDIA H100 芯片简介NVIDIA H100 主要特点NVIDIA H100 应用场景NVIDIA H100 使用举例NVIDIA H200 芯片简介NVIDIA H200 主要特点NVIDIA H200 应用场景NVIDIA H200 使用举例Summary NVIDIA H100 和 H20…

How do I increase max_new_tokens

题意&#xff1a;怎样增加 max_new_tokens 的值 问题背景&#xff1a; Im facing this error while running my code: 运行代码时遇到如下错误&#xff1a; ValueError: Input length of input_ids is 1495, but max_length is set to 20. This can lead to unexpected…

lua 游戏架构 之 游戏 AI (五)ai_autofight_find_way

这段Lua脚本定义了一个名为 ai_autofight_find_way 的类&#xff0c;继承自 ai_base 类。 lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客文章浏览阅读238次。定义了一套接口和属性&#xff0c;可以基于这个基础类派生出具有特定行为的AI组件。例如&…

Vue实现简单小案例

一、创建文件夹 二、引用vue.js <script src"../js/vue.js"></script> 三、准备一个容器 <div id"app"><h1>Hello,{{name}}</h1> </div> 四、创建实例 <script>new Vue({el:"#app", //el用于指…

tcache attack

Tcache Attack tcache让堆利用更加简单&#xff1a; tcache回顾&#xff1a; 在 tcache 中新增了两个结构体&#xff0c;分别是 tcache_entry 和 tcache_perthread_struct&#xff1a; /* We overlay this structure on the user-data portion of a chunk when the chunk is …

数据库概念以及增删改

1.概念 、 2.通用语法 3.数据增删改

mac大文件清理软件哪个好 mac大文件怎么清理 苹果电脑清理软件推荐免费

mac采用固态硬盘技术&#xff0c;数据存储和系统响应速度优势明显&#xff0c;但是mac的内存弊端同样体现在其固态硬盘的技术&#xff0c;导致用户无法通过机械硬盘进行扩充内存。而我们日常使用电脑会产生大量系统垃圾、用户缓存等文件&#xff0c;平时下载的电影和大型游戏安…

通信原理-实验六:实验测验

实验六 实验测验 一&#xff1a;测验内容和要求 测试需要完成以下几个步骤&#xff1a; 配置好以下网络图&#xff1b;占总分10%&#xff08;缺少一个扣一分&#xff09;根据下面图配置好对应的IP和网关以及路由等相关配置&#xff0c;保证设备之间连通正常&#xff1b;占总…

【日常记录】【JS】对一个数组,按照某个字段的值,进行分组

文章目录 1. 前言2. lodash 的分组3. Object.groupBy()参考链接 1. 前言 在开发中&#xff0c;经常会遇到一组数据&#xff0c;要按照某个字段进行分组&#xff0c;这个时候会有很多种方法&#xff0c;可以使用 forEach、reduce、等其他方法 reduce 方法 function groupBy(arr…

JS基础知识学习笔记全

JS基础知识学习笔记全 一、引入方式 1、内部脚本 &#xff08;一般定义在body下面会改善执行速度&#xff09; <body></body><!-- 内部脚本 --><script>/* 打开页面警告框显示的内容 */alert(helloJS);</script>2、外部脚本 外部专门新建一…

Redis-主从模式

目录 前言 一.主从节点介绍 二.配置redis主从结构 二.主从复制 四.拓扑结构 五.数据同步 全量复制&#xff08;Full Sync Replication&#xff09; 局部复制&#xff08;Partial Replication&#xff09; Redis的学习专栏&#xff1a;http://t.csdnimg.cn/a8cvV 前言 …

H3CNE(vlan与子接口技术)

目录 10.1 vlan间通信技术 示例一&#xff08;多臂路由&#xff09;&#xff1a; 10.2 子接口技术 示例二&#xff08;子接口技术&#xff09;&#xff1a; 10.3 vlannif接口技术 10.3.1 三层交换机与VLANNIF技术 示例三VLANNIF配置&#xff08;将交换机当成路由器使用&…

鸿蒙仓颉语言【cryptocj 库】RC2、 RC4 、AES对称加密算法

2 提供RC2、 RC4 、AES对称加密算法 前置条件&#xff1a;NA 场景&#xff1a; 支持对称加密算法。 约束&#xff1a;RC2密钥长度一般16字节&#xff0c;加密块长度8字节&#xff1b;AES加密块长度16字节 性能&#xff1a; 支持版本几何性能持平 可靠性&#xff1a; NA …

pytest:4种方法实现 - 重复执行用例 - 展示迭代次数

简介&#xff1a;在软件测试中&#xff0c;我们经常需要重复执行测试用例&#xff0c;以确保代码的稳定性和可靠性。在本文中&#xff0c;我们将介绍四种方法来实现重复执行测试用例&#xff0c;并显示当前迭代次数和剩余执行次数。这些方法将帮助你更好地追踪测试执行过程&…

3.多租户调研1

https://gitee.com/xiaoqiangBUG/hello-ruoyi-cloud.git 1.mybatis plus 的插件 TenantLineInnerInterceptor 是 MyBatis Plus 框架中的一个拦截器&#xff0c;它用于实现多租户系统的数据隔离。在多租户应用中&#xff0c;不同的租户应该只能访问到自己的数据&#xff0c;而…

URL过滤、DNS过滤和内容过滤的总结

目录 URL过滤 URL和URI URL -- 统一资源定位符 URI --- 统一资源的标识符 URL和URI之间的区别 URL过滤的方式 HTTP协议获取URL的方式 HTTP协议做控制管理的流程 HTTPS协议做控制管理的流程 1&#xff0c;配置SSL的解密功能 2&#xff0c;直接针对加密流量进行过滤 例…