OpenDDS 安全配置
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 安全配置相关推荐
- OpenDDS安装与开发
OpenDDS安装与开发 文章目录 OpenDDS安装与开发 1. OpenDDS介绍 2. 环境搭建 3. OpenDDS测试 4. 名词解释 5. OpenDDS应用开发步骤 参考链接 1. Op ...
- 反射内存 延时_一种基于反射内存卡的OpenDDS分布式通信方法与流程
本发明属于分布式通信技术领域,尤其涉及一种基于反射内存卡的OpenDDS分布式通信方法. 背景技术: 随着分布式系统复杂程度的不断增加和研发规模的迅速扩大,系统集成的难度和风险都在大幅提高.提供实时系 ...
- OpenDDS通讯中rtps_discovery对等发现的基本配置和说明
OpenDDS的对等发现模式中,可以采用组播或单播方式进行发现和基于主题的DataReader和DataWriter的匹配,下面是一个简单的配置样例: [common] DCPSGlobalTrans ...
- Visual Studio2015配置OpenDDS
一.VS2015下载 VS2015需要下载update3版本,若是下载的update2等,将会导致后续的TAO编译失败. [下载地址] 二.perl的下载 首先,根据ActiveStatePerl下载 ...
- 如何配置DDS以使用多个网络接口?How do I configure DDS to work with multiple network interfaces?
最近在使用OpenDDS的时候遇到一个问题:存在多个虚拟网卡时,发布(订阅)端重新连接时会阻塞几分钟,在外网找到一篇与此相关的文章. You cannot specify which NICs DDS ...
- 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系统.本文目 ...
- 一个基于OpenDDS的股票报价Stock Quote和交易exchange 的完整用例介绍
1 简介 分布式实时应用程序有时更以数据为中心data-centric,而不是以服务为中心service-centric,这意味着分布式系统中参与者的主要目标是传播应用程序数据,而不是访问共享服务.应 ...
- 【原创】OpenDDS笔记(一) Windows环境下的开发实例
一直想搞一搞OpenDDS,最近终于能抽出空来研究一下了.可能是年龄大了,若不做点记录过段时间脑子就清零了.趁热打铁,本文记录了Windows10环境下OpenDDS环境搭建,编译,idl自定义,代码 ...
- OpenDDS系列(3) —— 第一个OpenDDS程序
文章目录 @[toc] 3.1 发送数据 3.2 项目 3.2.1 主题 3.2.2 Publisher(发布者) 3.2.3 Subscriber(订阅者) 3.3 在Windows上构建 3.4 ...
- openDDS(一)opneDDS简介
1. OpenDDS简要介绍 1.1 简介 1.1.1 DDS是什么 1.1.2 DDS通信的基本要素 1.1. ...
最新文章
- python朗读网页-Python带你朗读网页
- 2015上半年软件设计师考点,难点3
- Makefile中的变量和shell变量
- shell 取中间行的第一列_shell脚本的使用该熟练起来了,你说呢?(篇三)
- 直方图均衡化为何需要累积概率的通俗解释,保证让你秒懂
- 前端笔试题(附答案)
- Go Out Otherwise Shut Up
- Spark SQL(七)之基于用户的相似度公式
- 基于生成对抗网络的医学数据域适应研究
- SAP License:SAP中的凭证查询、科目余额表及分类账详解
- 机器学习-吴恩达-笔记-5-神经网络学习
- 实现“0”的突破:给一直没有对主机硬件进行过任何“保洁、养护”的网友“支两招”...
- 你知道的Python面向对象真的是全面的嘛?看看这个你就知道了
- 绿盟漏洞扫描工具_IDC盘点2020上半年中国安全市场绿盟科技再获响应和编排能力认可...
- js Math.rander的用法
- 简体繁体转换JS(JavaScript)脚本
- 脚踏实地、仰望星空的贵系学子们
- 量子计算机读后感,《天才的拓荒者:冯·诺伊曼传》- 读后感
- MongoDB 学习笔记八 复制、分片、备份与恢复、监控
- 电脑网页游戏微端服务器失败,电脑重装后微端游戏玩不了,网页也进不了