Safety Profile

OpenDDS使用ACE作为其平台抽象库,并且在OpenDDS的安全配置文件配置中,必须在ACE中启用以下安全配置文件之一:

•FACE Safety Base (always uses the memory pool)

-safety-profile=base”

•FACE Safety Extended with Memory Pool

-safety-profile

•FACE Safety Extended with Standard C++ Dynamic Allocation

build/target/ACE_wrappers/ace/config.h”

删除宏定义ACE_HAS_ALLOC_HOOKS

当配置safety-profile时,以下功能无效

  • DCPSInfoRepo and its associated libraries and tools
  • Transport types: tcp, udp, multicast, shared memory
    • The rtps_udp transport type is available (uses UDP unicast or multicast)
  • OpenDDS Monitor library and monitoring GUI

在开发安全配置文件时,以下DDS Compliance Profiles被禁用:

•content_subscription

•ownership_kind_exclusive

•object_model_profile

•persistence_profile

OpenDDS Security

configure --security --openssl=/foo --xerces3=/bar

DDS安全规范定义了用于身份验证访问控制加密操作的插件API。

只适用于 RTPS Discovery及RTPS-UDP Transport;

两种方式启用Security

1.代码级别 TheServiceParticipant->set_security(true);

2. 配置级别 在[common]中 “DCPSSecurity=1”

DDS Security Configuration Via PropertyQosPolicy

当应用程序创建DomainParticipant对象时,传递给create_participant()方法的DomainParticipantQos现在包含一个PropertyQosPolicy对象,该对象具有一系列名称/值对。 必须包括以下属性以启用安全性。

Name

Value

Notes

dds.sec.auth.identity_ca

Certificate PEM file

可以和Permissions_ca相同

dds.sec.access.permissions_ca

Certificate PEM file

可以与identity_ca相同

dds.sec.access.governance

Signed XML (.p7s)

Signed by permissions_ca

dds.sec.auth.identity_certificate

Certificate PEM file

Signed by identity_ca

dds.sec.auth.private_key

Private Key PEM file

Private key for identity_certificate

dds.sec.auth.password

Private Key Password(not a URI)

Optional, Base64 encoded

dds.sec.access.permissions

Signed XML (.p7s)

Signed by permissions_ca

示例代码:

// DDS Security artifact file locations

const char auth_ca_file[] = "file:identity_ca_cert.pem";

const char perm_ca_file[] = "file:permissions_ca_cert.pem";

const char id_cert_file[] = "file:test_participant_01_cert.pem";

const char id_key_file[] = "file:test_participant_01_private_key.pem";

const char governance_file[] = "file:governance_signed.p7s";

const char permissions_file[] = "file:permissions_01_signed.p7s";

// DDS Security property names

const char DDSSEC_PROP_IDENTITY_CA[] = "dds.sec.auth.identity_ca";

const char DDSSEC_PROP_IDENTITY_CERT[] = "dds.sec.auth.identity_certificate";

const char DDSSEC_PROP_IDENTITY_PRIVKEY[] = "dds.sec.auth.private_key";

const char DDSSEC_PROP_PERM_CA[] = "dds.sec.access.permissions_ca";

const char DDSSEC_PROP_PERM_GOV_DOC[] = "dds.sec.access.governance";

const char DDSSEC_PROP_PERM_DOC[] = "dds.sec.access.permissions";

void append(DDS::PropertySeq& props, const char* name, const char* value){

const DDS::Property_t prop = {name, value, false /*propagate*/};

const unsigned int len = props.length();

props.length(len + 1);

props[len] = prop;

}

int main(int argc, char* argv[]){

DDS::DomainParticipantFactory_var dpf = TheParticipantFactoryWithArgs(argc, argv);

// Start with the default Participant QoS

DDS::DomainParticipantQos part_qos; dpf->get_default_participant_qos(part_qos);

// Add properties required by DDS Security

DDS::PropertySeq& props = part_qos.property.value;

append(props, DDSSEC_PROP_IDENTITY_CA, auth_ca_file);

append(props, DDSSEC_PROP_IDENTITY_CERT, id_cert_file);

append(props, DDSSEC_PROP_IDENTITY_PRIVKEY, id_key_file);

append(props, DDSSEC_PROP_PERM_CA, perm_ca_file);

append(props, DDSSEC_PROP_PERM_GOV_DOC, governance_file);

append(props, DDSSEC_PROP_PERM_DOC, permissions_file);

// Create the participant

participant = dpf->create_participant(4, // DomainID part_qos, 0, // No listener OpenDDS::DCPS::DEFAULT_STATUS_MASK);

Domain Governance XML

domain_rule

Element

Type

Description

<allow_unauthenticated_participants>

Boolean

一个布尔值,该值确定当前域规则是否允许未经身份验证的参与者

<enable_join_access_control>

Boolean

一个布尔值,该值确定是否对经过身份验证的参与者强制执行域访问控制

<discovery_protection_kind>

ProtectionKind

{NONE, SIGN, ENCRYPT,SIGN_WITH_ORIGIN_AUTHENTICATION, or ENCRYPT_WITH_ORIGIN_AUTHENTICATION}

discovery protection元素指定用于安全端点发现消息的内置DataWriter和DataReader的保护类型

<liveliness_protection_kind>

ProtectionKind

活泼性保护元素指定用于安全活泼性消息的内置DataWriter和DataReader的保护类型

<rtps_protection_kind>

ProtectionKind

指示整个RTPS消息所需的保护级别。 RTPS数据很少存在于“元数据保护”范围之外(请参阅主题规则配置选项),因此在大多数情况下,主题级别的“数据保护”或“元数据保护”可以与发现保护和/或活动性保护结合使用。 为了充分保护域数据。 不受“元数据保护”保护的一项是时间戳,因为RTPS为此使用了单独的InfoTimestamp子消息。 时间戳可以通过使用<rtps_protection_kind>来保护。

topic_rule

Element

Type

Description

<topic_expression>

FnmatchExpression

具有通配符的字符串,用于匹配主题名称。

<enable_discovery_protection>

Boolean

启用使用安全发现保护来匹配用户主题公告。

<enable_read_access_control>

Boolean

允许使用访问控制保护来匹配用户主题DataReader。

<enable_write_access_control>

Boolean

允许使用访问控制保护来匹配用户主题DataWriter。

<metadata_protection_kind>

ProtectionKind

指定用于其关联主题名称与规则的主题表达式匹配的任何DataWriter和DataReader发送的RTPS SubMessage所使用的保护类型。

<data_protection_kind>

BasicProtectionKind

{NONE, SIGN, ENCRYPT}

指定用于任何关联主题名称与规则的主题表达式匹配的DataWriter发送的RTPS SerializedPayload SubMessage元素所使用的基本保护类型

Participant permission XML

Element

Type

Grants

每个权限文件都包含一个或多个权限授予。 每个授予都在有限的有效期内将访问控制特权授予单个主题名称

Subject Name

每个Grants的Subject名称都旨在与相应的身份证明的“Subject”字段匹配。 为了使权限检查能够成功验证本地和远程参与者,提供的身份证书Subject名称必须与权限文件中包括的授予之一的Subject名称匹配。

Validity

每个Grants的有效期部分均包含开始日期和结束日期,以指示Grants有效的时间段。

Allow/Deny Rules

授予将包含一个或多个允许/拒绝规则,以指示正在应用哪些特权。 验证所提供的授权是否允许特定操作时,将按照规则在文件中出现的顺序检查规则。 如果适用主题规则的domain,partition和data tags(如果实现)与正在验证的操作匹配,则将应用规则(允许或拒绝)。 否则,将考虑下一条规则。

*当前支持domian,publish,subscribe

*当前不支持relay rule, data tag

OpenDDS 安全配置相关推荐

  1. OpenDDS安装与开发

    OpenDDS安装与开发 文章目录 OpenDDS安装与开发 1. OpenDDS介绍 2. 环境搭建 3. OpenDDS测试 4. 名词解释 5. OpenDDS应用开发步骤 参考链接 1. Op ...

  2. 反射内存 延时_一种基于反射内存卡的OpenDDS分布式通信方法与流程

    本发明属于分布式通信技术领域,尤其涉及一种基于反射内存卡的OpenDDS分布式通信方法. 背景技术: 随着分布式系统复杂程度的不断增加和研发规模的迅速扩大,系统集成的难度和风险都在大幅提高.提供实时系 ...

  3. OpenDDS通讯中rtps_discovery对等发现的基本配置和说明

    OpenDDS的对等发现模式中,可以采用组播或单播方式进行发现和基于主题的DataReader和DataWriter的匹配,下面是一个简单的配置样例: [common] DCPSGlobalTrans ...

  4. Visual Studio2015配置OpenDDS

    一.VS2015下载 VS2015需要下载update3版本,若是下载的update2等,将会导致后续的TAO编译失败. [下载地址] 二.perl的下载 首先,根据ActiveStatePerl下载 ...

  5. 如何配置DDS以使用多个网络接口?How do I configure DDS to work with multiple network interfaces?

    最近在使用OpenDDS的时候遇到一个问题:存在多个虚拟网卡时,发布(订阅)端重新连接时会阻塞几分钟,在外网找到一篇与此相关的文章. You cannot specify which NICs DDS ...

  6. 2022-VS2015-ACE+TAO(7.0.5)+CIAO+OpenDDS 3.16 编译

    ACE+TAO(7.0.5)+CIAO+OpenDDS 3.16 编译 采用ACE+TAO(7.0.5).CIAO(3.10)-DANCE.OpenDDS-3.16,编译构建OpenDDS系统.本文目 ...

  7. 一个基于OpenDDS的股票报价Stock Quote和交易exchange 的完整用例介绍

    1 简介 分布式实时应用程序有时更以数据为中心data-centric,而不是以服务为中心service-centric,这意味着分布式系统中参与者的主要目标是传播应用程序数据,而不是访问共享服务.应 ...

  8. 【原创】OpenDDS笔记(一) Windows环境下的开发实例

    一直想搞一搞OpenDDS,最近终于能抽出空来研究一下了.可能是年龄大了,若不做点记录过段时间脑子就清零了.趁热打铁,本文记录了Windows10环境下OpenDDS环境搭建,编译,idl自定义,代码 ...

  9. OpenDDS系列(3) —— 第一个OpenDDS程序

    文章目录 @[toc] 3.1 发送数据 3.2 项目 3.2.1 主题 3.2.2 Publisher(发布者) 3.2.3 Subscriber(订阅者) 3.3 在Windows上构建 3.4 ...

  10. openDDS(一)opneDDS简介

    1. OpenDDS简要介绍         1.1 简介             1.1.1 DDS是什么             1.1.2 DDS通信的基本要素             1.1. ...

最新文章

  1. python朗读网页-Python带你朗读网页
  2. 2015上半年软件设计师考点,难点3
  3. Makefile中的变量和shell变量
  4. shell 取中间行的第一列_shell脚本的使用该熟练起来了,你说呢?(篇三)
  5. 直方图均衡化为何需要累积概率的通俗解释,保证让你秒懂
  6. 前端笔试题(附答案)
  7. Go Out Otherwise Shut Up
  8. Spark SQL(七)之基于用户的相似度公式
  9. 基于生成对抗网络的医学数据域适应研究
  10. SAP License:SAP中的凭证查询、科目余额表及分类账详解
  11. 机器学习-吴恩达-笔记-5-神经网络学习
  12. 实现“0”的突破:给一直没有对主机硬件进行过任何“保洁、养护”的网友“支两招”...
  13. 你知道的Python面向对象真的是全面的嘛?看看这个你就知道了
  14. 绿盟漏洞扫描工具_IDC盘点2020上半年中国安全市场绿盟科技再获响应和编排能力认可...
  15. js Math.rander的用法
  16. 简体繁体转换JS(JavaScript)脚本
  17. 脚踏实地、仰望星空的贵系学子们
  18. 量子计算机读后感,《天才的拓荒者:冯·诺伊曼传》- 读后感
  19. MongoDB 学习笔记八 复制、分片、备份与恢复、监控
  20. 电脑网页游戏微端服务器失败,电脑重装后微端游戏玩不了,网页也进不了

热门文章

  1. 编译器的差别gcc和VS
  2. Soar:一款 Web 可视化的 SQL 优化工具
  3. 高数符号用计算机表示,请问高等数学的符号怎么在电脑上打出来
  4. html快闪软件制作,教你如何用PPT轻松完成快闪视频制作?
  5. [Python从零到壹] 六.网络爬虫之BeautifulSoup爬取豆瓣TOP250电影详解
  6. EXPRESS语言与IFC体系
  7. 3DMAX 2018 界面简介
  8. shell编程规范与变量
  9. Java中汉字生成拼音首拼和五笔码实例
  10. 计算机组成原理试题解析pdf,计算机组成原理试题集.pdf