diff --git a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java index 6c4b9752f..4adfe55e4 100644 --- a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java +++ b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/ChenfengElasticsearchAutoConfiguration.java @@ -1,5 +1,8 @@ package com.cf.imes.framework.es.config; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.ObjectUtil; import co.elastic.clients.elasticsearch.ElasticsearchAsyncClient; import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.json.jackson.JacksonJsonpMapper; @@ -26,12 +29,13 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; -import org.springframework.core.io.ClassPathResource; import org.springframework.util.StringUtils; import javax.net.ssl.SSLContext; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Path; +import java.nio.file.Paths; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; @@ -95,25 +99,7 @@ public class ChenfengElasticsearchAutoConfiguration { @Bean @ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "true") public RestClient getAuthRestClient(EsProperties properties) { - // 配置账号密码 - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, - new UsernamePasswordCredentials(AesUtils.decrypt(properties.getUsername(), publicKey), AesUtils.decrypt(properties.getPassword(), publicKey))); - RestClientBuilder.HttpClientConfigCallback httpClientConfigCallback = httpClientBuilder -> { - // 设置账号密码、连接信息 - HttpAsyncClientBuilder httpAsyncClientBuilder = httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider) - .setDefaultRequestConfig(RequestConfig.custom() - .setConnectTimeout(properties.getConnectionTimeout().toSecondsPart()) - .setSocketTimeout(properties.getSocketTimeout().toSecondsPart()) - .setConnectionRequestTimeout(properties.getConnectionRequestTimeout().toSecondsPart()) - .build()); - if (properties.isSecurityHttpSslEnable()) { - // 开启ssl配置连接证书 - httpAsyncClientBuilder.setSSLContext(buildSSLContext()).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); - } - return httpAsyncClientBuilder; - }; - return RestClient.builder(toHttpHost(properties.getUris(), properties.isSecurityHttpSslEnable())).setHttpClientConfigCallback(httpClientConfigCallback).build(); + return getRestClient(properties, true); } /** @@ -125,31 +111,62 @@ public class ChenfengElasticsearchAutoConfiguration { @Bean @ConditionalOnProperty(name = "chenfeng.encrypt.enable", havingValue = "false", matchIfMissing = true) public RestClient getRestClient(EsProperties properties) { - return RestClient.builder(toHttpHost(properties.getUris(), properties.isSecurityHttpSslEnable())).setRequestConfigCallback(requestConfigBuilder -> { - requestConfigBuilder.setConnectTimeout(properties.getConnectionTimeout().toSecondsPart()); - requestConfigBuilder.setSocketTimeout(properties.getSocketTimeout().toSecondsPart()); - requestConfigBuilder.setConnectionRequestTimeout(properties.getConnectionRequestTimeout().toSecondsPart()); - return requestConfigBuilder; - }).build(); + return getRestClient(properties, false); + } + + /** + * 动态获取es client连接 + * + * @param properties 配置 + * @param needDecrypt 敏感信息是否需要解密 + * @return + */ + private RestClient getRestClient(EsProperties properties, boolean needDecrypt) { + // 配置账号密码 + CredentialsProvider credentialsProvider; + String username = properties.getUsername(); + String password = properties.getPassword(); + if (CharSequenceUtil.isAllNotEmpty(username, password)) { + credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials(needDecrypt ? AesUtils.decrypt(username, publicKey) : username, needDecrypt ? AesUtils.decrypt(password, publicKey) : password)); + } else { + credentialsProvider = null; + } + RestClientBuilder.HttpClientConfigCallback httpClientConfigCallback = httpClientBuilder -> { + // 设置账号密码、连接信息 + HttpAsyncClientBuilder httpAsyncClientBuilder = httpClientBuilder + .setDefaultRequestConfig(RequestConfig.custom() + .setConnectTimeout(properties.getConnectionTimeout().toSecondsPart()) + .setSocketTimeout(properties.getSocketTimeout().toSecondsPart()) + .setConnectionRequestTimeout(properties.getConnectionRequestTimeout().toSecondsPart()) + .build()); + if (ObjectUtil.isNotNull(credentialsProvider)) { + httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider); + } + if (properties.isSecurityHttpSslEnable()) { + // 开启ssl配置连接证书 + httpAsyncClientBuilder.setSSLContext(buildSSLContext(properties.getCertificatePath())).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); + } + return httpAsyncClientBuilder; + }; + return RestClient.builder(toHttpHost(properties.getUris(), properties.isSecurityHttpSslEnable())).setHttpClientConfigCallback(httpClientConfigCallback).build(); } /** * 构建ssl请求信息 * + * @param certificatePath 证书地址 * @return */ - private SSLContext buildSSLContext() { + private SSLContext buildSSLContext(String certificatePath) { SSLContext sslContext = null; try { - ClassPathResource resource = new ClassPathResource("http_ca.crt"); - CertificateFactory factory = CertificateFactory.getInstance("X.509"); - Certificate trustedCa; - try (InputStream is = resource.getInputStream()) { - trustedCa = factory.generateCertificate(is); - } + Path trustStorePath = Paths.get(certificatePath); KeyStore trustStore = KeyStore.getInstance("pkcs12"); - trustStore.load(null, null); - trustStore.setCertificateEntry("ca", trustedCa); + try (InputStream is = FileUtil.getInputStream(trustStorePath)) { + trustStore.load(is, "elastic".toCharArray()); + } SSLContextBuilder sslContextBuilder = SSLContexts.custom() .loadTrustMaterial(trustStore, null); sslContext = sslContextBuilder.build(); diff --git a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java index 5dfd0a99f..2dd90ffe5 100644 --- a/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java +++ b/cf-framework/cf-spring-boot-starter-elasticsearch/src/main/java/com/cf/imes/framework/es/config/EsProperties.java @@ -42,6 +42,8 @@ public class EsProperties { private boolean securityHttpSslEnable = false; + private String certificatePath; + public String getUris() { return uris; } @@ -105,4 +107,12 @@ public class EsProperties { public void setConnectionRequestTimeout(Duration connectionRequestTimeout) { this.connectionRequestTimeout = connectionRequestTimeout; } + + public String getCertificatePath() { + return certificatePath; + } + + public void setCertificatePath(String certificatePath) { + this.certificatePath = certificatePath; + } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-dev.yaml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-dev.yaml index ae26569e4..eafa852fc 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-dev.yaml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-dev.yaml @@ -70,6 +70,10 @@ spring: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 elasticsearch: uris: 192.168.1.205:9200 + security-http-ssl-enable: false + username: elastic + password: admin. + --- #################### 定时任务相关配置 #################### xxl: job: diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml index 1162b5e8d..feac9db10 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application-dev.yaml @@ -70,6 +70,10 @@ spring: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 elasticsearch: uris: 192.168.1.205:9200 + security-http-ssl-enable: false + username: elastic + password: admin. + --- #################### 定时任务相关配置 #################### xxl: job: