开启es tls支持

437 阅读1分钟

生成公私钥及证书步骤:
1.为Elasticsearch集群创建一个证书颁发机构
bin/elasticsearch-certutil ca
2.为集群中的每个节点生成证书和私钥
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

集群间加密通信配置:
在elasticsearch.yml配置文件中添加:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

加密http客户端通信(https):
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12

http客户端验证:https://es:9200
java连接代码:

String keyStorePass = "";
Path trustStorePath = Paths.get(getTrustStorePath());
KeyStore truststore = KeyStore.getInstance("pkcs12");
try (InputStream is = Files.newInputStream(trustStorePath)) {
	truststore.load(is, keyStorePass.toCharArray());
}
SSLContextBuilder sslBuilder = SSLContexts.custom()
		.loadTrustMaterial(truststore, null);
final SSLContext sslContext = sslBuilder.build();
builder = RestClient.builder(httpHosts)
		.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
			@Override
			public HttpAsyncClientBuilder customizeHttpClient(
					HttpAsyncClientBuilder httpClientBuilder) {
				httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
				return httpClientBuilder.setSSLContext(sslContext).setSSLHostnameVerifier((s, sslSession) -> true);
			}
		});