本文前期使用6.5版本完成,本次版本将使用7.12.1版本修改
- xpack已经在es6.3之后默认集成,本文包含:
- 1、es集群使用xpack加密,达到访问集群需要用户密码登录的效果。
- 2、采用SSL加密通信,提供https访问方式
- 3、java客户端如何连接加密后的es集群(9200,9300端口)httpclient方式,restClient高低版本方式都有包含
- 4、使用kibana界面化工具连接操作加密后的es集群
开启xpack
-
elasticsearch.yml 中加上:
xpack.security.enabled: true
注:
:
后空一个空格,如果是es集群请务必全部添加此配置
7.12.1版本需要加上xpack.security.transport.ssl.enabled: false
-
确保集群健康访问
_xpack/license/start_trial?acknowledge=true
(6.8以上版本省略此步骤)开启xpack功能,这时候集群会立马提示您输入用户名密码的弹窗进行登录,别急还需要设置一下
注:
(如果只需要加密功能,可以省略此步骤,以便永久免费使用,官方对于基本版不收费)此开启的是试用版,xpack的破解,请自行搜索,我文末也会提供一个6.5.0的破解包,替换一下就可以用了 -
设置es集群用户名密码
#自动生成(二选一) elasticsearch-setup-passwords auto #手动生成(推荐) elasticsearch-setup-passwords interactive
此处最容易出现错误,请保证您的集群是健康的并且全部开启了xpack功能,且配置一样,如果生成失败,请检查自己的集群配置,如果设置密码失败的可以试试这个博文的顺序ELK6.6.0 Xpack
-
为Elasticearch集群创建一个证书颁发机构
PKCS#12格式生成(代码推荐):elasticsearch-certutil ca PEM格式格式生成(kibana推荐):elasticsearch-certutil ca --pem
生成过程会提示输入密码,作用是访问证书的安全性,可以不设置
注:7.12.1版本会把文件生成到bin同级目录,下面放置的.p12证书的时候不用改变路径,判断是有一个程序base目录设置.
-
为es集群生成证书和秘钥
PKCS#12格式生成:elasticsearch-certutil cert --ca elastic-stack-ca.p12 PEM格式格式生成:elasticsearch-certutil cert --pem
同上会提示输入密码,略过
pkcs12证书里面包含了秘钥所以只有一个文件,pem会有独立的证书和key
请把生成的证书elastic-certificates.p12拷贝到集群中的其他节点,否则加密失效 -
TLS/SSL加密Transport通信
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
-
加密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
按照上面的步骤集群就可以实现加密访问,下面是使用java访问加密后的es集群
给出pom
<repositories>
<!-- add the elasticsearch repo -->
<repository>
<id>elasticsearch-releases</id>
<url>https://artifacts.elastic.co/maven</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 加入elasticsearch -->
<!-- https://mvnrepository.com/artifact/org.elasticsearch.plugin/transport-netty4-client -->
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>${es.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${es.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${es.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>${es.version}</version>
</dependency>
<!--java rest客户端连接9200-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.5.0</version>
</dependency>
<!--httpclient-->
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
HttpClient方式
package com.**.**.configuration;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl