Add SSL bundle support to Elasticsearch auto-configuration
Update Elasticsearch RestClient auto-configuration so that an SSL can be configured via an SSL bundle. Closes gh-35155
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package org.springframework.boot.autoconfigure.elasticsearch;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.http.HttpHost;
|
||||
@@ -24,7 +25,9 @@ import org.apache.http.auth.AuthScope;
|
||||
import org.apache.http.auth.Credentials;
|
||||
import org.apache.http.client.CredentialsProvider;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.config.Registry;
|
||||
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
|
||||
import org.apache.http.nio.conn.SchemeIOSessionStrategy;
|
||||
import org.assertj.core.api.InstanceOfAssertFactories;
|
||||
import org.elasticsearch.client.Node;
|
||||
import org.elasticsearch.client.RestClient;
|
||||
@@ -35,10 +38,12 @@ import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchConnectionDetails.Node.Protocol;
|
||||
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientConfigurations.PropertiesElasticsearchConnectionDetails;
|
||||
import org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration;
|
||||
import org.springframework.boot.test.context.FilteredClassLoader;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.BDDMockito.then;
|
||||
@@ -57,8 +62,8 @@ import static org.mockito.Mockito.mock;
|
||||
*/
|
||||
class ElasticsearchRestClientAutoConfigurationTests {
|
||||
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(ElasticsearchRestClientAutoConfiguration.class));
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner().withConfiguration(
|
||||
AutoConfigurations.of(ElasticsearchRestClientAutoConfiguration.class, SslAutoConfiguration.class));
|
||||
|
||||
@Test
|
||||
void configureShouldCreateRestClientBuilderAndRestClient() {
|
||||
@@ -282,6 +287,32 @@ class ElasticsearchRestClientAutoConfigurationTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("unchecked")
|
||||
void configureWithSslBundle() {
|
||||
List<String> properties = new ArrayList<>();
|
||||
properties.add("spring.elasticsearch.restclient.ssl.bundle=mybundle");
|
||||
properties.add("spring.ssl.bundle.jks.mybundle.truststore.location=classpath:test.jks");
|
||||
properties.add("spring.ssl.bundle.jks.mybundle.options.ciphers=DESede");
|
||||
properties.add("spring.ssl.bundle.jks.mybundle.options.enabled-protocols=TLSv1.3");
|
||||
this.contextRunner.withPropertyValues(properties.toArray(String[]::new)).run((context) -> {
|
||||
assertThat(context).hasSingleBean(RestClient.class);
|
||||
RestClient restClient = context.getBean(RestClient.class);
|
||||
Object client = ReflectionTestUtils.getField(restClient, "client");
|
||||
Object connmgr = ReflectionTestUtils.getField(client, "connmgr");
|
||||
Registry<SchemeIOSessionStrategy> registry = (Registry<SchemeIOSessionStrategy>) ReflectionTestUtils
|
||||
.getField(connmgr, "ioSessionFactoryRegistry");
|
||||
SchemeIOSessionStrategy strategy = registry.lookup("https");
|
||||
assertThat(strategy).extracting("sslContext").isNotNull();
|
||||
assertThat(strategy).extracting("supportedCipherSuites")
|
||||
.asInstanceOf(InstanceOfAssertFactories.ARRAY)
|
||||
.containsExactly("DESede");
|
||||
assertThat(strategy).extracting("supportedProtocols")
|
||||
.asInstanceOf(InstanceOfAssertFactories.ARRAY)
|
||||
.containsExactly("TLSv1.3");
|
||||
});
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class ConnectionDetailsConfiguration {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user