Filebeat 9.0.4无法连接本地Elasticsearch 9.0.3,报SSL握手错误bad_certificate
看起来你已经跟着官方文档完成了基础配置,甚至能通过浏览器和Kibana正常访问Elasticsearch,但Filebeat的SSL握手报错确实挺让人头疼的。咱们一步步来排查解决这个bad_certificate问题:
1. 先检查指纹的格式是否正确
你用openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt生成的指纹,要注意几个细节:
- 复制的时候要去掉开头的
SHA256 Fingerprint=前缀,只保留后面的XX:XX:XX:...部分 - 确保没有多余的空格,比如有些终端输出会自动换行,别把换行的空格也复制进去
- 大小写不影响,但要保证复制的内容和命令输出完全一致(除了前缀)
2. 换个思路:直接用CA证书文件代替指纹
有时候指纹匹配容易因为格式或编码问题出岔子,你可以试试在Filebeat配置里直接指定CA证书文件路径,代替ca_trusted_fingerprint:
修改filebeat.yml的output.elasticsearch.ssl部分:
output.elasticsearch: hosts: ["localhost:9200"] preset: balanced protocol: "https" username: "elastic" password: "<你的密码>" ssl: enabled: true # 替换成你http_ca.crt的绝对路径 ca_file: "/full/path/to/config/certs/http_ca.crt"
修改后重启Filebeat,看看是否能正常连接。
3. 验证ES的SSL证书有效性
用openssl命令直接测试和ES的SSL连接,确认证书本身没问题:
openssl s_client -connect localhost:9200 -CAfile config/certs/http_ca.crt
如果命令输出里能看到Verify return code: 0 (ok),说明证书是有效的,问题大概率出在Filebeat的配置或权限上;如果返回错误,那你需要确认ES使用的CA证书是不是你指定的这个文件。
4. 检查Filebeat的文件读取权限
确保Filebeat进程能读取到http_ca.crt文件:
- 查看证书文件权限:
ls -l config/certs/http_ca.crt,至少要保证其他用户有读权限(比如权限是-rw-r--r--) - 如果Filebeat用的是专属用户运行(默认是filebeat),可以把证书文件的所属组改成filebeat:
chown :filebeat config/certs/http_ca.crt
5. 确认Elasticsearch的SSL配置
检查Elasticsearch的config/elasticsearch.yml,确认以下配置是否正确指向你的CA证书:
xpack.security.http.ssl: enabled: true certificate_authorities: [ "config/certs/http_ca.crt" ]
如果ES的SSL配置用的是其他证书,那Filebeat用当前的CA肯定会握手失败。
如果以上方法都没解决问题,你可以启动Filebeat时开启SSL调试日志,获取更详细的错误信息:
filebeat -e -d ssl
把调试日志里的SSL相关错误信息贴出来,能帮咱们更精准地定位问题。
内容来源于stack exchange

