FastDDS安全机制1 - 安全配置

news2024/11/28 2:43:31

背景

OMG组织对于DDS的安全机制有着对应的定义,其定义在DDS-SECURITY文档中。

这其中主要包含了对应的身份认证、访问控制、通信加密和审计相关的插件。

资料来源:DDS-SECURITY

其实也主要保护了通信过程中的相关安全风险。

资料来源:DDS-SECURITY

我们都知道,通信过程中,主要存在着如上图的对应安全风险,例如:未授权访问,通信信道窃听,重放攻击等等。

而这些安全问题,目前业界普遍的解法就是对应的身份认证,访问控制和通信加密机制。

因此DDS定义的这一套安全机制也是相对比较完善的。

下面主要介绍一下对应具体的机制。

身份认证

FastDDS的身份认证插件主要是利用了PKI体系。因此,对应的插件名称也叫DDS:Auth:PKI-DH.

这个插件主要是针对于DDS的DomianParticipant进行身份的标识的。

我们知道,其实身份认证主要做了两件事,一件是标识不同的身份,第二件就是保证身份是可信的。

所以FastDDS使用PKI体系,需要每一个DomianParticipant都配置自己的公私钥,并且通过CA认证来保证身份证书是可信的。

并且,基于身份认证的过程,可以去交换后续的通信加密密钥。

使用

准备

所以如果要使用FastDDS自带的身份认证插件。首先我们需要准备如下的东西:

  1. 自己生成的CA公私钥对
  2. 自己生成对应的DomainParticipant身份公私钥对
  3. 利用CA对身份证书签名,生成CA签名后的身份证书

部署

部署的话,其实就需要我们将对应生成好的身份证书部署到对应的设备上。

这里部署的话,其实需要部署如下的信息。

  1. 上面生成的CA公钥证书文件(X509)
  2. CA签过名的身份证书文件
  3. 上面生成的身份私钥文件
  4. CRL文件

实际使用

FastDDS官方文档上已经给出了对应的使用说明,目前是可以通过C++在代码中直接实现,也可以通过预置写好的XML文件。

C++的方法如下:

DomainParticipantQos pqos;

// Activate DDS:Auth:PKI-DH plugin
pqos.properties().properties().emplace_back("dds.sec.auth.plugin",
        "builtin.PKI-DH");

// Configure DDS:Auth:PKI-DH plugin
pqos.properties().properties().emplace_back(
    "dds.sec.auth.builtin.PKI-DH.identity_ca",
    "file://maincacert.pem");
pqos.properties().properties().emplace_back(
    "dds.sec.auth.builtin.PKI-DH.identity_certificate",
    "file://partcert.pem");
pqos.properties().properties().emplace_back(
    "dds.sec.auth.builtin.PKI-DH.identity_crl",
    "file://crl.pem");
pqos.properties().properties().emplace_back(
    "dds.sec.auth.builtin.PKI-DH.private_key",
    "file://partkey.pem");
pqos.properties().properties().emplace_back(
    "dds.sec.auth.builtin.PKI-DH.password",
    "domainParticipantPassword");

生成证书

根据上面需要的情况我们知道,证书相关的文件最少是需要4个文件。

  1. ca证书
  2. ca签过名的身份认证证书
  3. crl吊销列表
  4. 身份认证私钥

ca证书生成

官方给出了一个配置文件

# File: maincaconf.cnf
# OpenSSL example Certificate Authority configuration file

####################################################################
[ ca ]
default_ca = CA_default # The default ca section

####################################################################
[ CA_default ]

dir = . # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
unique_subject = no # Set to 'no' to allow creation of
                    # several ctificates with same subject.
new_certs_dir = $dir

certificate = $dir/maincacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
                           # must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/maincakey.pem # The private key
RANDFILE = $dir/private/.rand # private random number file

name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options

default_days= 1825 # how long to certify for
default_crl_days = 30 # how long before next CRL
default_md = sha256 # which md to use.
preserve = no # keep passed DN ordering

policy = policy_match

# For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

[ req ]
prompt = no
#default_bits = 1024
#default_keyfile = privkey.pem
distinguished_name= req_distinguished_name
#attributes = req_attributes
#x509_extensions = v3_ca # The extentions to add to the self signed cert
string_mask = utf8only

[ req_distinguished_name ]
countryName = CN
stateOrProvinceName = ZJ
localityName = HZ
0.organizationName = seven
commonName = xx
emailAddress = xx@qq.com

通过配置文件,定义了证书的一些基本信息,因此通过配置文件,调用openssl生成对应的ecdsa密钥对。

注意上述的配置文件中需要手动创建对应database=$dir/index.txt。否则在对身份认证证书签名的时候就会出错。

openssl ecparam -name prime256v1 > ecdsaparam

openssl req -nodes -x509 \
  -days 3650 \
  -newkey ec:ecdsaparam \
  -keyout maincakey.pem \
  -out maincacert.pem \
  -config maincaconf.cnf

这里的ecparam参数主要是生成对应的ecdsaparam的参数,指定对应的算法名称,方便后续openssl生成密钥时自动查找算法。

生成身份认证密钥对

同样先编写配置文件。

# File: partconf.cnf

prompt = no
string_mask = utf8only
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
countryName = CN
stateOrProvinceName = ZJ
localityName = HZ
organizationName = seven
emailAddress = xx@qq.com
commonName = xx

之后调用openssl生成对应的请求证书和私钥

openssl req -nodes \
  -new -newkey ec:ecdsaparam \
  -config identitycertconf.cnf \
  -keyout partkey.pem \
  -out partreq.pem

使用CA私钥对刚刚生成的证书进行签名。

openssl ca -batch -create_serial \
  -config maincaconf.cnf \
  -days 3650 \
  -in partreq.pem \
  -out partcert.pem

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

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

相关文章

轻松保护文档安全:三种实用的PDF加密方法

在我们的日常工作中,经常会使用到PDF格式的文件。为了保护版权和隐私,有时候我们需要对文档进行加密处理。那么,如何对PDF进行加密呢?今天我将为大家介绍几种方法,其中包括记灵在线工具、迅捷PDF编辑器和Speedpdf。 方…

Debian11之 RKE2 部署 K8S 集群

官方地址 资源列表 主机IP主机名称主机角色软件192.168.111.50server1主节点1API Server、controller-manager 和 scheduler192.168.111.51server2主节点2API Server、controller-manager 和 scheduler192.168.111.52server3主节点3API Server、controller-manager 和 schedu…

SocketTools crack所有安全连接的默认安全协议

SocketTools crack所有安全连接的默认安全协议 在所有HTTP客户端组件中添加了对HTTP/2.0协议的支持。 更新了TLS 1.2(及更高版本)和SSH 2.0的安全选项,以使用Microsoft Windows 11和Windows Server 2022中提供的密码套件。较旧、安全性较低的密码套件已被弃用&#…

JavaScript 基础 DOM (二)

事件流 事件流是对事件执行过程的描述 事件捕获 从DOM的根元素开始去执行对应的事件 (从外到里) 事件冒泡 当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。这一过程被称为事件冒 泡 addEventListener 第3个参数决定了事件是在捕获阶…

(数据结构)栈的实现——再一次保姆级教学

目录 1. 栈 ​编辑 1.2 栈的实现 2. 代码的实现 2.1 初始化栈和销毁栈 2.2栈顶元素的插入 2.3栈顶元素的删除 栈元素删除 2.4栈顶元素的获取和栈元素的个数 1. 栈 1.1 栈的概念和结构 栈(Stack)是一种线性存储结构,它具有如下特点: &#xff0…

git的学习3

文章目录 一、git status 命令二、git diff 命令三、git commit 命令四、git reset 命令五、git rm 命令六、git mv 命令七、提交日志1、Git 查看提交历史2、git blame 总结 提交与修改部分 一、git status 命令 git status 命令用于查看在你上次提交之后是否有对文件进行再次…

jenkins集成sonarqube进行代码质量检测

Jenkins集成Sonar Qube实现代码扫描需要先下载整合插件 安装SonarQube scanner 插件,安装完后,插件展示如下 配置SonarQube 的配置信息 这里给名称取为:sonarqubeFirst, server Url设置为SonarQube的地址,为http:19…

类和对象【1】初识

全文目录 引言(初识面向对象)类和对象定义类访问限定及封装类定义的两种方式 类实例化与类对象大小this指针 总结 引言(初识面向对象) C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通…

如何使用Understand软件查看STM32单片机HAL库函数调用关系

在使用STM32单片机的HAL库函数编程时,会发现好多中断函数里面都有各种回调函数,还有好多函数的调用深度比较深,在编写代码的时候,有时候想查看某个函数是如何被调用的,查看起来非常麻烦。这时候就可以使用Understand软…

Android活动生命周期

GitHub:https://github.com/MADMAX110/Stopwatch 活动的生命不只是有创建和撤销,onCreate和onDestroy方法用来处理整个生命周期,除了这两个方法,另外还有一些处理活动可见性的生命周期方法。 具体来讲,有三个关键的生…

Flink学习——DataStream API

一个flink程序,其实就是对DataStream的各种转换。具体可以分成以下几个部分: 获取执行环境(Execution Environment)读取数据源(Source)定义基于数据的转换操作(Transformations)定义…

.net6 接收json数据 Controller http post

.net6 接收json数据 Controller http post 要添加这两个包 前端ajax请求 function tst() {$.ajax({type: "POST",contentType: "application/json",url: "/HelloWorld/Welcome",data: JSON.stringify({ "ID":1,"name": &…

Qt实现undo和redo功能--连续后退

刚开始想做这个的时候,我专门去找了Qt官方的测试例子,运行起来点了点,代码翻了翻。然后照猫画虎般的写了个测试例子。 不明白,为什么每个例子旁边会有个命令的显示列表,还巨丑的那种,这如果要放在别的程序…

DJ6-4 文件存储空间的管理

目录 6.4.1 空闲表 1、存储空间的分配与回收 2、空闲表法的优缺点 6.4.2 空闲链表 1、空闲盘块链 2、空闲盘区链 6.4.3 位示图 1、位示图的表示 2、存储空间的分配 3、存储空间的回收 4、位示图法的优缺点 6.4.4 成组链接 1、空闲盘块的组织 plus 个人理解图…

前端web入门-HTML-day01

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 HTML初体验 HTML 定义 标签语法 总结: HTML 基本骨架 基础知识: 总结&#…

20年磨一剑,数慧时空推出智能遥感云平台DIEY及自然资源多模态大模型“长城”

5月17日,主题为“时空智能 从感知到决策”的第十二届全球地理信息开发者大会(WGDC2023)在北京昆泰酒店举行。大会聚集了千余位产业专家、行业用户、创新企业等业界精英,共话时空智能时代下的技术发展与应用创新。中国科学院院士、…

初始计算机操作系统——进程与线程,多线程以及Thread类的创建和属性

目录 通过前半篇文章需要了解 1.进程(process/task):运行起来的可执行文件。 为啥要有进程? 如何解决这个问题? (1)进程池: (2)使用线程: 为啥线…

国考省考行测:判断推理,类比推理1,概念关系,包含关系,交叉关系,并列关系,全同关系

国考省考行测:判断推理,类比推理1,概念关系,包含关系,交叉关系,并列关系,全同关系 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论&#x…

chatgpt赋能Python-libreoffice_python扩展

LibreOffice Python扩展: 提升办公效率的利器 如果你一直在寻找一种提高办公效率的方法,那么你肯定会喜欢LibreOffice Python扩展。作为LibreOffice的一个特性,它可以让你使用Python编写宏程序自动化你的日常办公任务。 什么是LibreOffice Python扩展&…

力扣sql中等篇练习(二十一)

力扣sql中等篇练习(二十一) 1 最大数量高于平均水平的订单 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # Write your MySQL query statement below WITH t1 as (SELECT order_id,avg(quantity) AquantityFROM OrdersDeta…