Filebeat与Logstash配置SSL加密通信
为了保证应用日志数据的传输安全,我们可以使用SSL相互身份验证来保护Filebeat和Logstash之间的连接。 这可以确保Filebeat仅将加密数据发送到受信任的Logstash服务器,并确保Logstash服务器仅从受信任的Filebeat客户端接收数据。
下面就讲述一下配置Filebeat与Logstash之间进行加密通信的方法。全文是在CentOS7上基于Elastic 7.5.0技术栈所验证的。
需要一个自签的CA证书,以及使用该CA证书签署的两份数据证书。一份是给Logstash作为server端验证自己身份时使用,一份是提供给Filebeat客户端验证自己身份使用。
直接利用的Elasticsearch随安装包提供的数字证书工具elasticsearch-certutil来制作需要的证书.官方地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/certutil.html
- 制作自签的CA证书
在Linux下,进入到Elasticsearch程序的部署家目录中,执行以下命令可以生成一份自签的CA证书:
./bin/elasticsearch-certutil ca
使用默认输出文件名elastic-stack-ca.p12,并为证书设置访问口令。
根据证书文件导出一份CA公钥文件,用于后续各应用配置文件中引用CA公钥时使用:
openssl pkcs12 -clcerts -nokeys -in elastic-stack-ca.p12 -out ca.pem
或者使用这个:
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 # elastic-certificates.p12
openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out out ca.pem
- 制作Logstash使用的数字证书
Logstash服务在启用SSL加密通信支持时,会有一个特殊的问题。因为Logstash在底层是通过集成了Netty来提供的对外服务端口,而Netty在支持数字证书这一功能上面,有一个局限性,即Netty仅支持使用PKCS#8的密钥格式。
对于我们使用最多的PEM格式证书,Logstash会毫不留情地打印出以下异常信息:
[ERROR][logstash.inputs.beats ] Looks like you either have a bad certificate, an invalid key or your private key was not in PKCS8 format.
由于Elastic官网上对于Filebeat和Logstash之间配置SSL加密通信时的说明资料对制作Logstash使用的数字证书的操作一带而过,只是简单的说既可以使用elasticsearch自带的证书工具,也可以使用通用的openssl。所以,按照Elastic技术栈中处理其它工具配置SSL功能支持时的方法,制作和得到PEM格式的证书后,便会遇到Logstash抛出的上面的异常信息了。由于Logstash打印的错误信息比较多,分析了很长时间才定位到是由于未使用PKCS8密钥格式所引发的。
制作Logstash Server证书的正确方法
# --name为制作的证书名称,--dns为hosts文件解析后的地址,--ip为logstash程序所在主机ip
在生成证书时至少需要提供--dns参数的值,可以使用逗号分隔指定多个,简单处理的话可以接指定为Filebeat工具所在主机的hostname即可。
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --name logstash --dns logstash --ip 192.168.75.21 --pem --out logstash.zip # 使用自签的CA签署生成了一份名为logstash的数字证书
unzip logstash.zip # 解压后会各有一个.key和.crt后缀的文件
cd logstash
openssl pkcs8 -in logstash.key -topk8 -nocrypt -out logstash.p8 # 使用openssl转换出一份PKCS#8格式的密钥文件,即logstash.p8
# 不一定非要使用p8结尾,这样的也可以:openssl pkcs8 -in config/certs/logstash.key -topk8 -nocrypt -out config/certs/logstash.pkcs8.key
对于制作的logstash.crt的证书,可以使用以下命令查看证书中的信息:
openssl x509 -in logstash.crt -text
将证书文件部署到Logstash配置目录下
假定我们部署Logstash的路径为/etc/logstash ,我们创建下面这样的证书存放目录certs,并把包括logstash证书和ca证书在内的文件部署于此。
mkdir -p /etc/logstash/certs
# 把ca.pem logstash.crt logstash.key logstash.p8这四个文件拷贝到该目录下
ll /etc/logstash/certs
ca.pem logstash.crt logstash.key logstash.p8
chmod 600 * # 安全起见,将以上文件权限调整为600
- 为Filebeat服务制作和配置数字证书
回到刚才制作CA证书的地方,继续为Filebeat生成一份数字证书:
# 在生成证书时至少需要提供--dns参数的值,可以使用逗号分隔指定多个,简单处理的话可以直接指定为Filebeat工具所在主机的hostname即可。
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --name filebeat --dns filebeat --ip 192.168.75.20 --pem --out filebeat.zip
unzip filebeat.zip
# 将得到的数字证书和密钥文件,以及ca证书文件,复制到Filebeat存储证书的路径下:
mkdir -p /etc/filebeat/certs
ll /etc/filebeat/certs
filebeat.crt filebeat.key ca.pem
chmod 600 * # 安全起见,将以上文件权限调整为600
- 配置Filebeat使用SSL
编辑filebeat.yml文件,参照以下内容进行配置:
# 注意logstash的ip地址,或者使用dns地址代替
output.logstash:
hosts: ["192.168.75.21:5044"]
ssl.certificate_authorities: ["/etc/filebeat/certs/ca.pem"]
ssl.certificate: "/etc/filebeat/certs/filebeat.crt"
ssl.key: "/etc/filebeat/certs/filebeat.key"
- 配置Logstash在通过beats接收日志数据时使用SSL
# 在ssl_key参数中,引用的是我们制作的PCKS#8格式的密钥文件
input {
beats {
port => 5044
codec => plain {
charset => "UTF-8"
}
ssl => true
ssl_certificate_authorities => ["/etc/logstash/certs/ca.pem"]
ssl_certificate => "/etc/logstash/certs/logstash.crt"
ssl_key => "/etc/logstash/certs/logstash.p8"
ssl_verify_mode => "force_peer"
}
}
- 启动Filebeat服务并观察日志
观察日志输出,显示有类似以下信息时表示Filebeat正常连接到Logstash服务且SSL功能工作正常。
Connecting to backoff(async(tcp://log.mytestserver.com:5044))
Connection to backoff(async(tcp://log.mytestserver.com:5044)) established
或者配置output输出进行查看是否可以收到filebeat传递过来的日志信息
output {
stdout {
codec => rubydebug
}
}
官方说明

Filebeat与Logstash配置SSL加密通信的更多相关文章
- Security基础(三):OpenSSL及证书服务、邮件TLS/SSL加密通信
一.OpenSSL及证书服务 目标: 本案例要求熟悉OpenSSL工具的基本使用,完成以下任务操作: 使用OpenSSL加密/解密文件 搭建企业自有的CA服务器,为颁发数字证书提供基础环境 方案: 使 ...
- nginx配置ssl加密(单双向认证、部分https)
nginx配置ssl加密(单双向认证.部分https) nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始 ...
- [转帖]nginx配置ssl加密(单/双向认证、部分https)
nginx配置ssl加密(单/双向认证.部分https) https://segmentfault.com/a/1190000002866627 nginx下配置ssl本来是很简单的,无论是去认证 ...
- Logstash跟es加密通信
前提条件,es集群内部各节点已开启https访问,集群也已开启x-pack安全功能,并设置了系统默认的用户密码等,具体操作详见:https://www.cnblogs.com/sanduzxcvbnm ...
- nginx配置ssl加密(单/双向认证、部分https)
nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始采用的是全站加密,所有访问http:80的请求强制转换( ...
- [svc]logstash和filebeat之间ssl加密
cfssl生成证书 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl wget https://pkg ...
- 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)
继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...
- 转 关于Https协议中的ssl加密解密流程
关于Https协议中的ssl加密解密流程 2016年09月28日 09:51:15 阅读数:14809 转载自:http://www.cnblogs.com/P_Chou/archive/2010/1 ...
- Nginx 通过 certbot 为网站自动配置 SSL 证书并续期
一.背景知识 1.1.http 和 https 是什么? 简单来说,http 是一个传输网页内容的协议,比如你看到的 http 开头的网站 http://www.163.com ,其网页上的文字.图片 ...
随机推荐
- iSCSI的配置(target/initiator)
iSCSI:Internet 小型计算机系统接口 (iSCSI:Internet Small Computer System Interface) iSCSI技术是一种由IBM公司研究开发的,是一个供 ...
- Linux signal与定时器
1. signal sighandler_t signal(int signum, sighandler_t handler); signum:是一个信号.除了SIGKILL和SIGSTOP外的任何一 ...
- MQTT实战2 - 使用MQTTnet实现mqtt通信
MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信 MQTT实战2 - 使用MQTTnet实现mqtt通信 源码下载 -> 提取码 QQ:505645074 MQTT ...
- H3C路由器设置NAT回环、端口回流
起因 当用本地服务器作为frp的服务端时,需要在路由器上设置端口映射,将公网ip和本地ip映射起来,用于作为frps的公网,这一步很简单一般都会有可视化界面来实现,但实际测试时发现问题: 当非局域网内 ...
- MySQL的select(极客时间学习笔记)
查询语句 首先, 准备数据, 地址是: https://github.com/cystanford/sql_heros_data, 除了id以外, 24个字段的含义如下: 查询 查询分为单列查询, 多 ...
- 原生 JavaScript 代替 jQuery【转】
目录 用原生JavaScript代替jQuery Query Selector CSS & Style DOM Manipulation Ajax Events Utilities Promi ...
- Shel脚本-初步入门之《04》
Shel脚本-初步入门-04 脚本语言的种类 4.脚本语言的种类 4.1 Shell 脚本语言的种类 Shell 脚本语言是弱类型语言(无须定义变量的类型即可使用),在 Unix/Linux 中主要有 ...
- Nginx类
nginx常见错误页面有哪些?对于其解决方法是什么? 404 bad request 请求失败,请求所希望得到的资源未被在服务器上发现.没有信息能够告诉用户这个状况到底是暂时的还是永久的.假如服务器知 ...
- centos7编译安装php 遇到的问题
centos7 编辑安装php遇到的问题: ./configure 配置遇到的No package 'libxml-2.0' found缺失libxml2.0 库,解决方法: yum -y insta ...
- JAVA基础概念(一)
一.JAVA标识符 标识符就是用于给 Java 程序中变量.类.方法等命名的符号.如图标黄部分: 使用标识符时,需要遵守几条规则: 1. 标识符可以由字母.数字.下划线(_).美元符($)组成,但不 ...