一、生成相關證書
ps:主節(jié)點操作
-
切換用戶:su es
-
進入目錄:cd /home/es/elasticsearch-7.6.2
-
創(chuàng)建文件:vi instances.yml
instances: - name: "master" ip: - "192.168.248.10" - name: "slave1" ip: - "192.168.248.11" - name: "slave2" ip: - "192.168.248.12" - name: "kibana" ip: - "192.168.248.10" - name: "logstash" ip: - "192.168.248.10" - name: "filebeat" ip: - "192.168.248.10"
-
生成證書:/home/es/elasticsearch-7.6.2/bin/elasticsearch-certutil cert ca --pem --in instances.yml --out certs.zip
-
解壓得到各個證書:unzip certs.zip
二、配置elasticSearh
ps:三個節(jié)點
-
切換用戶:su es
-
將解壓得到的三個文件夾文件拷貝到各個節(jié)點的/home/es/elasticsearch-7.6.2/config下,如master節(jié)點:ca.crt、master.crt、master.key
-
三個節(jié)點配置,末尾添加配置:vi /home/es/elasticsearch-7.6.2/config/elasticsearch.yml
ps1:根據(jù)名字配置master和slave1和slave2
ps2:如果之前配置過密碼,需要將密碼的配置先移除xpack.security.http.ssl.enabled: true xpack.security.http.ssl.key: master.key xpack.security.http.ssl.certificate: master.crt xpack.security.http.ssl.certificate_authorities: ca.crt xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.key: master.key xpack.security.transport.ssl.certificate: master.crt xpack.security.transport.ssl.certificate_authorities: ["ca.crt"]
-
如果是用root用戶拷貝的,記得賦權:chown -R es:es /home/es
-
啟動
cd /home/es/elasticsearch-7.6.2/bin nohup /home/es/elasticsearch-7.6.2/bin/elasticsearch &
-
設置密碼:/home/es/elasticsearch-7.6.2/bin/elasticsearch-setup-passwords interactive
ps1:可以統(tǒng)一設置一個密碼ffcsict123
ps2:如果已經(jīng)設置過密碼了,可以忽略?;蛘咭部梢詣h除es的 .security-7 索引,重新執(zhí)行設置密碼的操作也可以
三、配置kibana
-
將kibana證書放到/home/es/kibana-7.6.2-linux-x86_64/config下:kibana.crt、ca.crt、kibana.key
-
配置:vi /home/es/kibana-7.6.2-linux-x86_64/config/kibana.yml
# 修改 elasticsearch.hosts: ["https://192.168.248.10:9200","https://192.168.248.11:9200","https://192.168.248.12:9200"] # 末尾添加 # 這三個路徑寫成相對路徑會被錯,寫絕對路徑才行,不知道為啥 server.ssl.enabled: true server.ssl.certificate: /home/es/kibana-7.6.2-linux-x86_64/config/kibana.crt server.ssl.key: /home/es/kibana-7.6.2-linux-x86_64/config/kibana.key elasticsearch.ssl.certificateAuthorities: ["/home/es/kibana-7.6.2-linux-x86_64/config/ca.crt"] elasticsearch.username: "kibana" elasticsearch.password: "ffcsict123"
-
如果是用root用戶拷貝的,記得賦權:chown -R es:es /home/es
-
啟動:nohup /home/es/kibana-7.6.2-linux-x86_64/bin/kibana &
-
訪問:https://192.168.248.10:5601
四、配置logstash
-
將logstash證書放到/home/es/logstash-7.6.2/config下:logstash.crt、ca.crt、logstash.key
-
修改配置文件:vi /home/es/logstash-7.6.2/config/logstash.yml
xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.username: logstash_system xpack.monitoring.elasticsearch.password: ffcsict123 xpack.monitoring.elasticsearch.hosts: ["https://192.168.248.10:9200"] xpack.monitoring.elasticsearch.ssl.certificate_authority: "/home/es/logstash-7.6.2/config/ca.crt"
-
修改配置文件:vi /home/es/logstash-7.6.2/config/logstash-sample.conf
output { elasticsearch { hosts => ["https://192.168.248.10:9200","https://192.168.248.11:9200","https://192.168.248.12:9200"] index => "testlog-%{+YYYY.MM.dd}" user => "elastic" password => "ffcsict123" ssl => true cacert => "/home/es/logstash-7.6.2/config/ca.crt" } }
-
啟動:nohup /home/es/logstash-7.6.2/bin/logstash -f /home/es/logstash-7.6.2/config/logstash-sample.conf &
五、配置filebeat
--------------------如果logstash不需要轉(zhuǎn)https,則可以忽略以下步驟-----------------
-
殺死logstash進程
-
將 logstash.key 轉(zhuǎn)換為 PKCS#8 格式
cd /home/es/logstash-7.6.2/config openssl pkcs8 -in logstash.key -topk8 -nocrypt -out logstash.pkcs8.key
-
由于我們一個logstash服務,會有很多filebeat服務寫日志進來。如果將logstash改為https訪問,需要將所有涉及的filebeat都進行改配置。所以如果只是要求es改造為https,可以不改造logstash。如果需要改造,則修改配置文件:vi /home/es/logstash-7.6.2/config/logstash-sample.conf
input { beats { port => 5044 ssl => true ssl_certificate_authorities => ["/home/es/logstash-7.6.2/config/ca.crt"] ssl_certificate => "/home/es/logstash-7.6.2/config/logstash.crt" ssl_key => "/home/es/logstash-7.6.2/config/logstash.pkcs8.key" ssl_verify_mode => "force_peer" } }
-
啟動logstash:nohup /home/es/logstash-7.6.2/bin/logstash -f /home/es/logstash-7.6.2/config/logstash-sample.conf &
-
將filebeat證書放到/home/es/filebeat-7.6.2-linux-x86_64下:filebeat.crt、filebeat.crt、filebeat.key
-
配置filebeat:vi /home/es/filebeat-7.6.2-linux-x86_64/filebeat.yml文章來源:http://www.zghlxwxcb.cn/news/detail-697881.html
output.logstash: hosts: ["192.168.248.10:5044"] ssl.certificate_authorities: ["/home/es/filebeat-7.6.2-linux-x86_64/ca.crt"] ssl.certificate: "/home/es/filebeat-7.6.2-linux-x86_64/filebeat.crt" ssl.key: "/home/es/filebeat-7.6.2-linux-x86_64/filebeat.key"
-
啟動:nohup /home/es/filebeat-7.6.2-linux-x86_64/filebeat -e -c /home/es/filebeat-7.6.2-linux-x86_64/filebeat.yml &文章來源地址http://www.zghlxwxcb.cn/news/detail-697881.html
六、連接https es的java api
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
import org.elasticsearch.client.*;
import org.elasticsearch.cluster.metadata.AliasMetadata;
import org.springframework.core.io.ClassPathResource;
import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.util.*;
/**
* @author 天真熱
* @create 2023-09-02 20:25
* @desc
**/
public class elkDemo {
public static String ip = "192.168.248.10";
public static String port = "9200";
public static String esUsername = "elastic";
public static String esPassword = "ffcsict123";
public static void main(String[] args) throws IOException {
{
RestHighLevelClient clinet = getConnection();
List<Map<String, Object>> indexs = getIndex(clinet);
System.out.println(indexs);
}
}
/**
* 創(chuàng)建鏈接
* @return
*/
public static RestHighLevelClient getConnection() {
// 創(chuàng)建憑據(jù)提供程序
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esUsername, esPassword));
RestClientBuilder http = RestClient.builder(new HttpHost(ip, Integer.parseInt(port), "https"))
.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
requestConfigBuilder.setConnectTimeout(700000);
requestConfigBuilder.setSocketTimeout(600000);
requestConfigBuilder.setConnectionRequestTimeout(100000);
return requestConfigBuilder;
}
}).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
return httpAsyncClientBuilder.setSSLContext(buildSSLContext())
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).setDefaultCredentialsProvider(credentialsProvider);
}
});
return new RestHighLevelClient(http);
}
/**
* 獲取所有索引
*/
public static List<Map<String, Object>> getIndex(RestHighLevelClient esHighInit) throws IOException {
List<Map<String, Object>> resultList = new ArrayList();
GetAliasesRequest request = new GetAliasesRequest();
GetAliasesResponse alias = esHighInit.indices().getAlias(request, RequestOptions.DEFAULT);
Map<String, Set<AliasMetadata>> map = alias.getAliases();
map.forEach((k, v) -> {
if (!k.startsWith(".")) {//忽略elasticesearch 默認的
Map map1 = new HashMap();
map1.put("indexName", k);
resultList.add(map1);
}
});
return resultList;
}
/**
* 創(chuàng)建證書驗證
* @return
*/
private static SSLContext buildSSLContext() {
ClassPathResource resource = new ClassPathResource("master.crt");
SSLContext sslContext = null;
try {
CertificateFactory factory = CertificateFactory.getInstance("X.509");
Certificate trustedCa;
try (InputStream is = resource.getInputStream()) {
trustedCa = factory.generateCertificate(is);
}
KeyStore trustStore = KeyStore.getInstance("pkcs12");
trustStore.load(null, null);
trustStore.setCertificateEntry("ca", trustedCa);
SSLContextBuilder sslContextBuilder = SSLContexts.custom()
.loadTrustMaterial(trustStore, null);
sslContext = sslContextBuilder.build();
} catch (Exception e) {
e.printStackTrace();
}
return sslContext;
}
}
到了這里,關于elasticSearch+kibana+logstash+filebeat集群改成https認證的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!