3.2.3. RTI Security Plugins
3.2.3.1. Wire Compatibility
3.2.3.1.1. Permissions expiration enforcement
In 7.7.0, the Security Plugins enforce Permissions expiration at the time marked by the <notAfter> tag in the DomainParticipant’s Permissions Grant, for the entire DomainParticipant lifecycle. Therefore, DomainParticipants in 7.7.0 will stop communicating with remote DomainParticipants that have expired permissions. This release also introduces a way to renew the expiring permissions at runtime, allowing DomainParticipants to continue their operation in the system. Support for permissions renewal requires an additional, user-supplied mechanism for periodically supplying and renewing DomainParticipants Permissions Documents.
Pre-7.7.0 DomainParticipants verify Permissions validity only during local DomainParticipant creation and during remote DomainParticipant authentication. They do not offer a way to renew their Permissions and will be removed from the system once their permissions expire. If you require 7.7.0 DomainParticipants to interoperate with older Security Plugins versions, there are two workarounds for pre-7.7.0 DomainParticipants available:
Restart the DomainParticipant with a new Permissions Document. With this option, your system must be tolerant to intrinsic, periodic DomainParticipant downtimes.
Configure the Permissions Document with a <notAfter> tag value sufficiently in the future, so that it doesn’t expire during DomainParticipant runtime. This option incurs a security risk. The risk can be mitigated with short-lived identity certificates (available since release 7.2.0) or with OCSP (available since release 7.5.0).
Refer to Permissions Expiration in the RTI Security Plugins User’s Manual for more details.
3.2.3.1.2. GUID consistency enforcement
Release 7.7.0 of the Security Plugins introduces an Access Control mechanism to
enforce consistency between
SampleInfo::publication_handle,
SampleInfo::original_publication_virtual_guid,
SampleInfo::source_guid,
DDS_PublicationBuiltinTopicData::virtual_guid,
and DDS_SubscriptionBuiltinTopicData::virtual_guid.
If your Permissions Document grant has <default>DENY</default>, then this
mechanism is enabled by default. If you are using
Collaborative DataWriters,
Persistence Service, Routing Service, or other Infrastructure Services built on
top of Routing Service, or
write_w_params
with WriteParams::identity.writer_guid or WriteParams::source_guid,
then you may experience communication failure along with this error:
does not match DDS_SampleInfo::publication_handle
In that case, you may need to adjust the proxy permissions in your
Permissions Document. Alternatively, you may set
<enforce_proxy_permissions>false</enforce_proxy_permissions> in your
Governance Document <domain_rule>, but this option is generally discouraged and
should only be used when integrating with legacy systems where domain insider
integrity and availability threats are not a concern.
Refer to DataWriters Acting as a Proxy for other DataWriters in the RTI Security Plugins User’s Manual for more details.
3.2.3.1.3. Interoperability with DomainParticipants that have a domain tag or partitions
In 7.7.0, the Builtin Security Plugins consider the DomainParticipant’s domain tag and partitions when deciding whether an allow or deny rule matches. If an allow rule doesn’t specify partitions, it will only match against the default empty string partition (“”). If a deny rule doesn’t specify partitions, it will match against any partition (including the default empty string partition). The same behavior applies to domain tags. Your Permissions Document must be explicit when allowing partitions and domain tags; the implicit behavior is to deny access as much as possible.
For example, consider the following rule in a Permissions Document:
<allow_rule>
<domains>
<id>0</id>
</domains>
</allow_rule>
<default>DENY</default>
In previous releases, a DomainParticipant with a subject name matching the grant of this rule would be allowed to publish or subscribe in domain 0, regardless of its domain tag or partitions. Starting in this release, the same DomainParticipant will be denied if it has a domain tag or partition different from the empty string.
As a result, if your system has a combination of both pre-7.3.1 and post-7.3.1 DomainParticipants,
you must update your
Permissions Document for all of them. Your system should
account for the new behavior and include the <partitions> and <tag> or
<tag_expression> elements as necessary. These tags must include the
must_interpret="false" attribute and value so versions of the Builtin Security Plugins
that do not support them don’t fail to parse the Permissions Document.
For example, this change in the previous rule will allow the DomainParticipant with a
Migration Guide tag and Permissions Document update partition.
<allow_rule>
<domains>
<id>0</id>
<tag must_interpret="false">Migration Guide</tag>
</domains>
<partitions must_interpret="false">
<partition>Permissions Document update</partition>
</partitions>
</allow_rule>
<default>DENY</default>
Note that this workaround only works for releases of the Builtin Security Plugins that
support the must_interpret attribute (7.0.0 or later). Connext added
support for DomainParticipant partitions in the 7.0.0 release and for domain tags in the
6.0.0 release. Communication with secure 6.x DomainParticipants is not possible if they are
configured with a domain tag.
3.2.3.2. Changes to Building an Application
3.2.3.2.1. OpenSSL 3 upgrade
Between release 7.3.0 and 7.3.1, the OpenSSL® version changed from 3.0.12 to 3.5.1. See OpenSSL 3 upgrade for user actions related to that upgrade. Release 7.7.0 uses version 3.5.5. (That upgrade, from 3.5.1 to 3.5.5, occurred between 7.6.0 and 7.7.0.) No user action is required for the upgrade from 3.5.1 to 3.5.5. Just note that Security Plugins 7.7.0 has only been tested by RTI using OpenSSL 3.5.5. If you need Security Plugins 7.7.0 to run against older versions of OpenSSL, please contact support@rti.com.
3.2.3.2.2. wolfSSL 5 upgrade
Release 7.7.0 of the Security Plugins upgrades the version of wolfSSL® from
5.5.1 to 5.8.2. The Security Plugins bundles have been renamed from 5.5
(e.g., rti_security_plugins-7.6.0-target-wolfssl-5.5-<architecture>.rtipkg)
to 5.8 (e.g., rti_security_plugins-7.7.0-target-wolfssl-5.8-<architecture>.rtipkg).
These bundles are API-compatible with wolfSSL version 5.8.2, not with versions
earlier than wolfSSL version 5.8.2. Note that Security Plugins 7.7.0 has only
been tested by RTI using wolfSSL version 5.8.2. If you need Security Plugins
7.7.0 to run against older versions of wolfSSL, please contact support@rti.com.
Note
The rti_security_plugins-<version>-host-wolfssl-<version>-<host platform>.rtipkg
packages are available on demand only. If you
do not see them in the Customer Portal, contact support@rti.com.
wolfSSL 5.8.2 requires your X.509 Identity CA certificate (root and
intermediates) to have the basicConstraints = CA:true extension. Refer to
The basicConstraints X.509 v3 extension
in the RTI Security Plugins User’s Manual for more details. If you are migrating from wolfSSL 5.5.1 to
5.8.2, make sure your Identity CA certificates have this extension. In the
.cnf configuration file, verify that the x509_extensions = v3_ca
line is not commented out.
3.2.3.2.3. Linking against the Security Plugins for wolfSSL
Release 7.7.0 of the Security Plugins no longer ships the Security Plugins for
wolfSSL libraries in the <NDDSHOME>/lib/<architecture>/ directory (where
<NDDSHOME> refers to the root directory of your RTI Connext installation).
The libraries (both Lightweight Builtin Security Plugins and Builtin Security Plugins) are now located in the
<NDDSHOME>/lib/<architecture>/wolfssl-5.8/ directory.
As a consequence, if you are linking dynamically against the Security Plugins
for wolfSSL, you need to run your applications with the updated library path
that includes <NDDSHOME>/lib/<architecture>/wolfssl-5.8/. For example, on
Linux, you can set the LD_LIBRARY_PATH environment variable to:
export LD_LIBRARY_PATH=\
$NDDSHOME/lib/x64Linux4gcc8.5.0/wolfssl-5.8:\
$NDDSHOME/lib/x64Linux4gcc8.5.0:\
$NDDSHOME/third_party/wolfssl-5.8.2/x64Linux4gcc8.5.0/debug/lib
Make sure to add the path to the Security Plugins for wolfSSL before the path to the general libraries. Otherwise, your application may attempt to load the default Security Plugins for OpenSSL library.
If you are linking statically against the Security Plugins for wolfSSL, you need
to indicate the new library path to the linker in your build system. You can
find an example makefile in the example secure hello world applications provided
in the rti_workspace directory.
3.2.3.3. Configuration Changes
3.2.3.3.1. Changes to the default cryptographic algorithms
In this release, the Security Plugins changed the list of default supported algorithms
to be used if you don’t specify an algorithm rule in the <allowed_security_algorithms>
tag of the Governance Document. The default supported algorithms include only the
algorithms listed in the OMG DDS Security 1.2 specification. RTI-specific and experimental algorithms are
no longer included in the supported algorithm list by default and need to be explicitly
listed in the Governance Document. If your system uses such algorithms, you must update
your Governance Document to continue using them. See Supported Cryptographic Algorithms
in the Security Plugins User’s Manual for more information.
3.2.3.3.2. Plugin-specific access_control.permissions_file property no longer available
This release of the Security Plugins removes the plugin-specific
access_control.permissions_file property. You must now use the
dds.sec.access.permissions property according to the DDS Security
specification. See Properties for Configuring Access Control
in the Security Plugins User’s Manual for more information.
3.2.3.3.3. Renaming of the advance notice properties
This release of the Security Plugins renames the
dds.participant.trust_plugins.certificate_expiration_advance_notice_duration.sec
property to dds.participant.trust_plugins.expiration_advance_notice_duration.sec
and the dds.participant.trust_plugins.certificate_expiration_advance_notice_reminder_period.sec
property to dds.participant.trust_plugins.expiration_advance_notice_reminder_period.sec.
The old names are not supported any more. In this release, these properties
affect not only the Identity Certificate, but also the Permissions Document. For
more information, see the Security Plugins User’s Manual.
3.2.3.3.4. Removal of cryptography.max_receiver_specific_macs as a requirement for RTPS origin authentication
This release of the Security Plugins removes the
cryptography.max_receiver_specific_macs
property as a requirement for setting the Governance tag
<rtps_protection_kind> to a value that ends in
_WITH_ORIGIN_AUTHENTICATION. If you are setting
max_receiver_specific_macs only because it was a requirement and not
because you are trying to reduce the performance impact of origin
authentication, then you are encouraged to remove this setting in favor of the
new default value of AUTO.
3.2.3.4. Key Revision Changes
3.2.3.4.1. Key Revisions are enabled by default
This release introduces the enable_key_revision rule of the Governance
Document to control whether key revisions are enabled. This release also
enables key revisions by default, meaning the default value of the
enable_key_revision Governance Rule is true.
This change affects interoperability with previous releases. If
you want to interoperate with older Connext applications that are not using
Key Revisions, then you must explicitly disable
Key Revisions in your Governance Document, by setting the enable_key_revision
Domain Rule to false. Here is an example:
<domain_access_rules>
<domain_rule>
<domains>
<id_range>
<min>0</min>
</id_range>
</domains>
<allow_unauthenticated_participants>false</allow_unauthenticated_participants>
<enable_join_access_control>true</enable_join_access_control>
<enable_key_revision>false</enable_key_revision> <!-- Add this line here. -->
<discovery_protection_kind>ENCRYPT</discovery_protection_kind>
Then, you must re-sign the Governance Document with the Permissions Certificate Authority.
If you need to use the same Governance Document in both 7.7.0 and a
release older than 7.5.0, then you may add must_interpret="false" as described in
Keeping Governance and Permissions Compatibility Across Different Security Plugins Versions
in the RTI Security Plugins User’s Manual:
<enable_key_revision must_interpret="false">false</enable_key_revision>
3.2.3.4.2. Key Revision Max History Depth must be at least 8
If you are currently setting the dds.participant.trust_plugins.key_revision_max_history_depth
property value to 7, then starting in this release you must now increase
this value to at least 8, since 8 is the new minimum value if you are not
setting the property value to 0.
Note that this release introduces the enable_key_revision rule of the
Governance Document. This rule must be consistent with the value of the
dds.participant.trust_plugins.key_revision_max_history_depth property. If
the property has a non-zero value, then the enable_key_revision rule of the
Governance Document must be set to true. If the property has a value of 0,
then enable_key_revision must be set to false.
3.2.3.5. API Changes
3.2.3.6. Logging Changes
3.2.3.6.1. New logging topic for the Lightweight Security Plugins library
Release 7.7.0 of the Lightweight Builtin Security Plugins introduces a new logging topic,
DDS:Security:PSK:LogTopic. Previously, the Lightweight Builtin Security Plugins logged
messages to the same topic as the Builtin Security Plugins, DDS:Security:LogTopicV2.
However, according to the DDS Security Specification, this topic must enable
metadata and data protection. Therefore, the Lightweight Builtin Security Plugins should not log
to it.
Applications using the Lightweight Builtin Security Plugins and subscribing to the
DDS:Security:LogTopicV2 topic will no longer receive log messages from the
Lightweight Builtin Security Plugins. Instead, they should subscribe to the new
DDS:Security:PSK:LogTopic.
3.2.3.7. Deprecation and Removal Changes
3.2.3.7.1. HMAC-Only mode removed from the Builtin Security Plugins
HMAC-Only mode and the features based upon it are removed from the Builtin Security Plugins in 7.7.0. Use the Lightweight Builtin Security Plugins instead. Legacy HMAC-Only mode systems can communicate with modern Pre-Shared Key protected systems by using a 7.3.0 or 7.3.1 Routing Service instance (because these releases support both modes).
As a result of the removal, the plugin-specific properties for configuring
HMAC-Only mode are also removed: hmac_only.enabled,
hmac_only.cryptography.key, and
hmac_only.cryptography.max_blocks_per_session are no longer available. This
release also removes the authentication.participant_discovery_protection_key
and cryptography.rtps_protection_key properties for setting static HMAC keys
to compute signatures with.
3.2.3.7.2. Use new property in place of authentication.key_establishment_algorithm
Release 7.7.0 of the Security Plugins contains the new
dds.sec.auth.key_establishment_algorithm property, as defined in the
OMG DDS Security 1.2 specification. This new property deprecates the
authentication.key_establishment_algorithm plugin-specific one. Both properties
configure the algorithm used to establish a shared secret during authentication.
Their behavior and accepted values are the same. You should use the new
standard property instead of the deprecated plugin-specific one, because
the deprecated one may be removed in a future release.
3.2.3.7.3. Deprecation of authentication.crl and removal of authentication.crl_file
This release of the Security Plugins deprecates the plugin-specific
authentication.crl property, and removes the plugin-specific
authentication.crl_file property. Instead, you should set the
dds.sec.auth.crl property defined in the
OMG ‘DDS Security’ specification.
The behavior and configuration of the deprecated and the new property is the
same: they are both optional properties that configure the Certificate
Revocation List (CRL) used by the Builtin Security Plugins.
3.2.3.7.4. Removal of the deprecated SecurityPluginSuite_create entry point
Release 7.7.0 of the Security Plugins removes the
SecurityPluginSuite_create entry point. If you had set the
com.rti.serv.secure.create_function or
com.rti.serv.secure.create_function_ptr property with the deprecated entry
point, you must update it to use RTI_Security_PluginSuite_create
(function name or address, depending on property and linking mode). Refer to
Building and Running Security Plugins-Based Applications
in the RTI Security Plugins User’s Manual for more details.
3.2.3.7.5. Removal of the AES-192-GCM symmetric cipher algorithm
Following the deprecation of AES-192-GCM in release 7.3.0, release 7.7.0 now completely removes this cryptographic algorithm from the list of available symmetric cipher algorithms. If you are still using AES-192-GCM in your system, please transition to AES-256-GCM or AES-128-GCM.
For more information about symmetric cipher algorithms, see Algorithms Involved in Protecting Secure Entities Traffic in the RTI Security Plugins User’s Manual.
3.2.3.7.7. Renaming of the property that enables experimental algorithms
This release of the Security Plugins renames the
com.rti.serv.secure.authentication.enable_custom_algorithms
property to com.rti.serv.secure.authentication.enable_experimental_algorithms.
The Security Plugins no longer support the old name. The new name is clearer,
conveying the property’s purpose more effectively. This property enables
algorithms that the Security Plugins considers experimental and not fully
supported, such as EdDSA. It is not related to custom algorithms (those
algorithms that are implementation-specific and not defined by the
OMG ‘DDS Security’ specification),
such as AES-192.
3.2.3.8. SDK Changes
This release of the Security Plugins introduces changes in the Service Plugin
Interface (SPI). If you have implemented custom plugins, you may need to update
them for compatibility. See the Service Plugin Interface (SPI) Notes section
of the Security Plugins SDK documentation for more information. In your
Connext installation, find the documentation inside the
security-buildsrc/doc folder.