一、测试环境
系统:ubantu16.04
filebeat版本:7.9.2
ES版本:7.9.2
二、生成证书
1、生成ca根证书
# 生成根证书的私钥
openssl genrsa -out ./ca.key
# 利用私钥生成一个根证书的申请,一般证书的申请格式都是csr。所以私钥和csr一般需要保存好
openssl req -new -key ca.key -out ca.csr
# 自签名的方式签发我们之前的申请的证书,生成的证书为ca.crt
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
### $path为openssl.cnf里面[ CA_default ]里面dir选项的值 ###
# 为我们的证书建立第一个序列号,一般都是用4个字符,这个不影响之后的证书颁发等操作
echo FACE(01) > $path/serial。
# 建立ca的证书库,不影响后面的操作,默认配置文件里也有存储的地方。
touch $path/index.txt
# 建立证书回收列表保存失效的证书
openssl ca -gencrl -out ca.crl -crldays 7
# 已上就完成了根证书的相关操作,下一步可以颁发证书了。
# 生成和签发服务器身份验证证书,注意证书是自签名的,浏览器会提示不受信任
2、生成服务器端证书
# 建立服务器验证证书的私钥
openssl genrsa -out server.key
# 生成证书申请文件,制作签发证书的请求文件时,需要输入Common Name参数,此参数一定为当前主机的IP地址,否则将会显示证书错误。
openssl req -new -key server.key -subj "/CN=本机IP" -out server.csr
# CN=后为本机IP
echo subjectAltName = IP:"本机IP" > extfile.cnf
# 利用根证书签发服务器身份验证证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out server.crt -days 5000
3、生成客户端证书
# 生成私钥
openssl genrsa -des3 -out client.key 1024
# 生成证书请求文件
openssl req -new -key client.key -out client.csr
# 签发证书
openssl ca -in client.csr -cert ca.crt -keyfile ca.key -out client.crt
4、常见错误分析
> :unable to open '/etc/pki/CA/index.txt'
解决办法:touch /etc/pki/CA/index.txt。 类似文件找不到这种错误,直接按报错创建即可。
三、工具配置:
1、ES配置
> 配置config/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: none
xpack.security.transport.ssl.key: /home/python/Desktop/elasticsearch-7.9.2/config/certs/server.key
xpack.security.transport.ssl.certificate: /home/python/Desktop/elasticsearch-7.9.2/config/certs/server.crt
xpack.security.transport.ssl.certificate_authorities: /home/python/Desktop/elasticsearch-7.9.2/config/certs/ca.crt
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: /home/python/Desktop/elasticsearch-7.9.2/config/certs/server.key
xpack.security.http.ssl.certificate: /home/python/Desktop/elasticsearch-7.9.2/config/certs/server.crt
xpack.security.http.ssl.certificate_authorities: /home/python/Desktop/elasticsearch-7.9.2/config/certs/ca.crt
> 配置elasticsearch密码
# 进入bin目录
./elasticsearch-setup-passwords interactive
# 一步步设置密码
2、filebeat配置
> 在output.elasticsearch中
# 配置好证书地址,协议和用户名,密码
ssl.key: "/home/python/Desktop/filebeat-7.9.2-linux-x86_64/certs/client.key"
ssl.certificate: "/home/python/Desktop/filebeat-7.9.2-linux-x86_64/certs/client.crt"
ssl.certificate_authorities: ["/home/python/Desktop/filebeat-7.9.2-linux-x86_64/certs/ca.crt"]
# Protocol - either `http` (default) or `https`.
protocol: "https"
# Authentication credentials - either API key or username/password.
username: "elastic"
password: "123456"
四、参考资料:
es官方xpack配置文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/configuring-tls.html#node-certificates
filebeat配置文档:https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html
博客:
> x509: cannot validate certificate for address because it doesn't contain any IP SANs :
https://blog.csdn.net/min19900718/article/details/87920254
> CA证书自签详解
https://blog.csdn.net/z344945251/article/details/72870129
> es设置密码
https://www.cnblogs.com/chenjiangbin/p/12061074.html