From aa48614f55d62bfb08d3223fd9e4272c9d574e49 Mon Sep 17 00:00:00 2001 From: Craig Perkins <cwperx@amazon.com> Date: Fri, 18 Oct 2024 12:50:34 -0400 Subject: [PATCH 1/6] Add isDualModeEnabled to SecureTransportSettingsProvider interface Signed-off-by: Craig Perkins <cwperx@amazon.com> --- .../transport/netty4/ssl/SecureNetty4Transport.java | 4 ++-- .../plugins/SecureTransportSettingsProvider.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java b/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java index 977121346dcc3..8e2aa750dcd04 100644 --- a/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java +++ b/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java @@ -142,7 +142,7 @@ public SSLServerChannelInitializer(String name) { protected void initChannel(Channel ch) throws Exception { super.initChannel(ch); - final boolean dualModeEnabled = NetworkModule.TRANSPORT_SSL_DUAL_MODE_ENABLED.get(settings); + final boolean dualModeEnabled = secureTransportSettingsProvider.isDualModeEnabled(settings); if (dualModeEnabled) { logger.info("SSL Dual mode enabled, using port unification handler"); final ChannelHandler portUnificationHandler = new DualModeSslHandler( @@ -258,7 +258,7 @@ protected class SSLClientChannelInitializer extends Netty4Transport.ClientChanne public SSLClientChannelInitializer(DiscoveryNode node) { this.node = node; - final boolean dualModeEnabled = NetworkModule.TRANSPORT_SSL_DUAL_MODE_ENABLED.get(settings); + final boolean dualModeEnabled = secureTransportSettingsProvider.isDualModeEnabled(settings); hostnameVerificationEnabled = NetworkModule.TRANSPORT_SSL_ENFORCE_HOSTNAME_VERIFICATION.get(settings); hostnameVerificationResolveHostName = NetworkModule.TRANSPORT_SSL_ENFORCE_HOSTNAME_VERIFICATION_RESOLVE_HOST_NAME.get(settings); diff --git a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java index 5b7402a01f82d..e0ccf86eea638 100644 --- a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java +++ b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java @@ -9,6 +9,7 @@ package org.opensearch.plugins; import org.opensearch.common.annotation.ExperimentalApi; +import org.opensearch.common.network.NetworkModule; import org.opensearch.common.settings.Settings; import org.opensearch.transport.Transport; import org.opensearch.transport.TransportAdapterProvider; @@ -36,6 +37,15 @@ default Collection<TransportAdapterProvider<Transport>> getTransportAdapterProvi return Collections.emptyList(); } + /** + * Returns true if dual mode is enabled. Dual mode domains support both encrypted and non-encrypted traffic + * @param settings settings + * @return a boolean indicating if dual mode is enabled + */ + default boolean isDualModeEnabled(Settings settings) { + + } + /** * If supported, builds the {@link TransportExceptionHandler} instance for {@link Transport} instance * @param settings settings From d390bd9c62c3cb04ab86c6a5280ffa423812e32d Mon Sep 17 00:00:00 2001 From: Craig Perkins <cwperx@amazon.com> Date: Fri, 18 Oct 2024 12:53:57 -0400 Subject: [PATCH 2/6] Add default impl Signed-off-by: Craig Perkins <cwperx@amazon.com> --- .../org/opensearch/plugins/SecureTransportSettingsProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java index e0ccf86eea638..df3258a1c7648 100644 --- a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java +++ b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java @@ -43,7 +43,7 @@ default Collection<TransportAdapterProvider<Transport>> getTransportAdapterProvi * @return a boolean indicating if dual mode is enabled */ default boolean isDualModeEnabled(Settings settings) { - + return NetworkModule.TRANSPORT_SSL_DUAL_MODE_ENABLED.get(settings); } /** From a0844e9499efc78c49e1b4869caf9edccf5cc59d Mon Sep 17 00:00:00 2001 From: Craig Perkins <cwperx@amazon.com> Date: Fri, 18 Oct 2024 15:10:12 -0400 Subject: [PATCH 3/6] Respond to comments, update usages and update docstring Signed-off-by: Craig Perkins <cwperx@amazon.com> --- .../netty4/ssl/SecureNetty4Transport.java | 18 ++++++++++--- .../SecureTransportSettingsProvider.java | 26 ++++++++++++++++--- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java b/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java index 8e2aa750dcd04..b9e1704a2e343 100644 --- a/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java +++ b/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java @@ -57,6 +57,7 @@ import java.net.SocketAddress; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Optional; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; @@ -142,9 +143,14 @@ public SSLServerChannelInitializer(String name) { protected void initChannel(Channel ch) throws Exception { super.initChannel(ch); - final boolean dualModeEnabled = secureTransportSettingsProvider.isDualModeEnabled(settings); + boolean dualModeEnabled = false; + Optional<SecureTransportSettingsProvider.SecureTransportParameters> parameters = secureTransportSettingsProvider.parameters( + settings + ); + if (parameters.isPresent()) { + dualModeEnabled = parameters.get().dualModeEnabled(); + } if (dualModeEnabled) { - logger.info("SSL Dual mode enabled, using port unification handler"); final ChannelHandler portUnificationHandler = new DualModeSslHandler( settings, secureTransportSettingsProvider, @@ -258,7 +264,13 @@ protected class SSLClientChannelInitializer extends Netty4Transport.ClientChanne public SSLClientChannelInitializer(DiscoveryNode node) { this.node = node; - final boolean dualModeEnabled = secureTransportSettingsProvider.isDualModeEnabled(settings); + boolean dualModeEnabled = false; + Optional<SecureTransportSettingsProvider.SecureTransportParameters> parameters = secureTransportSettingsProvider.parameters( + settings + ); + if (parameters.isPresent()) { + dualModeEnabled = parameters.get().dualModeEnabled(); + } hostnameVerificationEnabled = NetworkModule.TRANSPORT_SSL_ENFORCE_HOSTNAME_VERIFICATION.get(settings); hostnameVerificationResolveHostName = NetworkModule.TRANSPORT_SSL_ENFORCE_HOSTNAME_VERIFICATION_RESOLVE_HOST_NAME.get(settings); diff --git a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java index df3258a1c7648..50fc6e98a1114 100644 --- a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java +++ b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java @@ -38,12 +38,30 @@ default Collection<TransportAdapterProvider<Transport>> getTransportAdapterProvi } /** - * Returns true if dual mode is enabled. Dual mode domains support both encrypted and non-encrypted traffic + * Returns parameters that can be dynamically provided by a plugin providing a {@link SecureTransportSettingsProvider} + * implementation * @param settings settings - * @return a boolean indicating if dual mode is enabled + * @return an instance of {@link SecureTransportParameters} */ - default boolean isDualModeEnabled(Settings settings) { - return NetworkModule.TRANSPORT_SSL_DUAL_MODE_ENABLED.get(settings); + default Optional<SecureTransportParameters> parameters(Settings settings) { + return Optional.of(new DefaultSecureTransportParameters(settings)); + } + + interface SecureTransportParameters { + boolean dualModeEnabled(); + } + + class DefaultSecureTransportParameters implements SecureTransportParameters { + private final Settings settings; + + DefaultSecureTransportParameters(Settings settings) { + this.settings = settings; + } + + @Override + public boolean dualModeEnabled() { + return NetworkModule.TRANSPORT_SSL_DUAL_MODE_ENABLED.get(settings); + } } /** From 1792a31df8190e0a87a15bc4b8d156ff4def4caf Mon Sep 17 00:00:00 2001 From: Craig Perkins <cwperx@amazon.com> Date: Fri, 18 Oct 2024 15:14:19 -0400 Subject: [PATCH 4/6] Address feedback Signed-off-by: Craig Perkins <cwperx@amazon.com> --- .../netty4/ssl/SecureNetty4Transport.java | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java b/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java index b9e1704a2e343..e51ed5663502f 100644 --- a/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java +++ b/modules/transport-netty4/src/main/java/org/opensearch/transport/netty4/ssl/SecureNetty4Transport.java @@ -57,7 +57,6 @@ import java.net.SocketAddress; import java.security.AccessController; import java.security.PrivilegedAction; -import java.util.Optional; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; @@ -143,13 +142,9 @@ public SSLServerChannelInitializer(String name) { protected void initChannel(Channel ch) throws Exception { super.initChannel(ch); - boolean dualModeEnabled = false; - Optional<SecureTransportSettingsProvider.SecureTransportParameters> parameters = secureTransportSettingsProvider.parameters( - settings - ); - if (parameters.isPresent()) { - dualModeEnabled = parameters.get().dualModeEnabled(); - } + final boolean dualModeEnabled = secureTransportSettingsProvider.parameters(settings) + .map(SecureTransportSettingsProvider.SecureTransportParameters::dualModeEnabled) + .orElse(false); if (dualModeEnabled) { final ChannelHandler portUnificationHandler = new DualModeSslHandler( settings, @@ -264,13 +259,9 @@ protected class SSLClientChannelInitializer extends Netty4Transport.ClientChanne public SSLClientChannelInitializer(DiscoveryNode node) { this.node = node; - boolean dualModeEnabled = false; - Optional<SecureTransportSettingsProvider.SecureTransportParameters> parameters = secureTransportSettingsProvider.parameters( - settings - ); - if (parameters.isPresent()) { - dualModeEnabled = parameters.get().dualModeEnabled(); - } + final boolean dualModeEnabled = secureTransportSettingsProvider.parameters(settings) + .map(SecureTransportSettingsProvider.SecureTransportParameters::dualModeEnabled) + .orElse(false); hostnameVerificationEnabled = NetworkModule.TRANSPORT_SSL_ENFORCE_HOSTNAME_VERIFICATION.get(settings); hostnameVerificationResolveHostName = NetworkModule.TRANSPORT_SSL_ENFORCE_HOSTNAME_VERIFICATION_RESOLVE_HOST_NAME.get(settings); From 937578ce37a61a3c7e381040b4c9c24db3c7526d Mon Sep 17 00:00:00 2001 From: Craig Perkins <cwperx@amazon.com> Date: Fri, 18 Oct 2024 15:16:46 -0400 Subject: [PATCH 5/6] Add ExperimentalApi and add to CHANGELOG Signed-off-by: Craig Perkins <cwperx@amazon.com> --- CHANGELOG.md | 1 + .../org/opensearch/plugins/SecureTransportSettingsProvider.java | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d67ed755fa31..52333b6a382c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Add _list/shards API as paginated alternate to _cat/shards ([#14641](https://github.com/opensearch-project/OpenSearch/pull/14641)) - Latency and Memory allocation improvements to Multi Term Aggregation queries ([#14993](https://github.com/opensearch-project/OpenSearch/pull/14993)) - Flat object field use IndexOrDocValuesQuery to optimize query ([#14383](https://github.com/opensearch-project/OpenSearch/issues/14383)) +- Add method to return dynamic SecureTransportParameters from SecureTransportSettingsProvider interface ([#16387](https://github.com/opensearch-project/OpenSearch/pull/16387) ### Dependencies - Bump `com.azure:azure-identity` from 1.13.0 to 1.13.2 ([#15578](https://github.com/opensearch-project/OpenSearch/pull/15578)) diff --git a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java index 50fc6e98a1114..1b5cd45620d32 100644 --- a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java +++ b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java @@ -47,6 +47,7 @@ default Optional<SecureTransportParameters> parameters(Settings settings) { return Optional.of(new DefaultSecureTransportParameters(settings)); } + @ExperimentalApi interface SecureTransportParameters { boolean dualModeEnabled(); } From 174344be751a6887a07d883be03f818eed50221f Mon Sep 17 00:00:00 2001 From: Craig Perkins <cwperx@amazon.com> Date: Fri, 18 Oct 2024 15:38:36 -0400 Subject: [PATCH 6/6] Move DefaultSecureTransportParameters to separate file and add javadoc Signed-off-by: Craig Perkins <cwperx@amazon.com> --- .../DefaultSecureTransportParameters.java | 28 +++++++++++++++++++ .../SecureTransportSettingsProvider.java | 17 ++--------- 2 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 server/src/main/java/org/opensearch/plugins/DefaultSecureTransportParameters.java diff --git a/server/src/main/java/org/opensearch/plugins/DefaultSecureTransportParameters.java b/server/src/main/java/org/opensearch/plugins/DefaultSecureTransportParameters.java new file mode 100644 index 0000000000000..e3771f224a7db --- /dev/null +++ b/server/src/main/java/org/opensearch/plugins/DefaultSecureTransportParameters.java @@ -0,0 +1,28 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + */ + +package org.opensearch.plugins; + +import org.opensearch.common.network.NetworkModule; +import org.opensearch.common.settings.Settings; + +/** + * Default implementation of {@link SecureTransportSettingsProvider.SecureTransportParameters}. + */ +class DefaultSecureTransportParameters implements SecureTransportSettingsProvider.SecureTransportParameters { + private final Settings settings; + + DefaultSecureTransportParameters(Settings settings) { + this.settings = settings; + } + + @Override + public boolean dualModeEnabled() { + return NetworkModule.TRANSPORT_SSL_DUAL_MODE_ENABLED.get(settings); + } +} diff --git a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java index 1b5cd45620d32..5f9e1a952b6e8 100644 --- a/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java +++ b/server/src/main/java/org/opensearch/plugins/SecureTransportSettingsProvider.java @@ -9,7 +9,6 @@ package org.opensearch.plugins; import org.opensearch.common.annotation.ExperimentalApi; -import org.opensearch.common.network.NetworkModule; import org.opensearch.common.settings.Settings; import org.opensearch.transport.Transport; import org.opensearch.transport.TransportAdapterProvider; @@ -47,24 +46,14 @@ default Optional<SecureTransportParameters> parameters(Settings settings) { return Optional.of(new DefaultSecureTransportParameters(settings)); } + /** + * Dynamic parameters that can be provided by the {@link SecureTransportSettingsProvider} + */ @ExperimentalApi interface SecureTransportParameters { boolean dualModeEnabled(); } - class DefaultSecureTransportParameters implements SecureTransportParameters { - private final Settings settings; - - DefaultSecureTransportParameters(Settings settings) { - this.settings = settings; - } - - @Override - public boolean dualModeEnabled() { - return NetworkModule.TRANSPORT_SSL_DUAL_MODE_ENABLED.get(settings); - } - } - /** * If supported, builds the {@link TransportExceptionHandler} instance for {@link Transport} instance * @param settings settings