首页 > 解决方案 > TLS 连接 - Beats 到 Redis

问题描述

我使用 Redis 输出在 Windows 机器上安装了 Winlogbeat。

Redis 服务器在端口 6380 上配置了 TLS。

两端启动服务成功,但连接不成功。我尝试了协议和密码套件的不同组合,但没有运气。我错过了什么?错误消息:

Redis:
Error accepting a client connection: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher

Windows:
ERROR   [publisher_pipeline_output] pipeline/output.go:154  Failed to connect to redis(tcp://10.1.1.4:6380): remote error: tls: handshake failure

这是 redis 服务器配置。CA 是自签名的 2048 位密钥和 x509 证书。服务器证书也是 x509。我想我可能需要重建 CA,但对此表示赞赏。

#tls configs
tls-port 6380
tls-cert-file /etc/ssl/redis.crt 
tls-key-file /etc/ssl/private/redis.key
tls-ca-cert-file /usr/local/share/ca-certificates/ca.crt
tls-auth-clients no
tls-prefer-server-ciphers no
tls-protocols "TLSv1.2"
tls-dh-params-file /etc/ssl/redis.dh
tls-ciphers DEFAULT
tls-ciphersuites ECDHE-ECDSA-CHACHA20-POLY1305

还有 Beats 配置。

output.redis:
  hosts: ["10.1.1.4:6380"]
  password: "redispass"
  key: "winlogbeat"
  db: 0
  timeout: 5
  data_type: "list"
  ssl:
    enabled: true
    certificate_authorities: ["C:\\Program Data\\Winlogbeat\\ca.crt"]
    insecure: true
    supported_protocols: [TLSv1.2]
    cipher_suites: [ECDHE-ECDSA-CHACHA20-POLY1305]
    curve_types: [P-256]

标签: sslredisfilebeat

解决方案


终于搞定了,万一有人感兴趣。

需要使用适当的参数安装和配置 CA,然后使用 IP 地址和主机名为 Redis 创建 SAN 服务器证书。以下是我关注的文章。

在托管 Redis 的服务器上,创建根 CA:https ://blog.devolutions.net/2020/07/tutorial-how-to-generate-secure-self-signed-server-and-client-certificates-with- openssl(只是本文中的根 CA)。

使用 IP 地址主题替代名称创建 Redis 服务器证书:https: //www.golinuxcloud.com/openssl-generate-csr-create-san-certificate/

从支持 TLS 的源安装 Redis:https ://godfrey-tutu.medium.com/redis-6-deployment-with-tls-authentication-on-centos-7-8b6e34d11cd0

Beats 和 Redis 将协商最佳加密。如果您保留现有的 Redis 配置并将 TLS 片段添加到另一个未使用的端口上,那么 Redis 将启动并监听两者。

这是新的 Beat 配置:

output.redis:
  hosts: ["10.1.1.4:6380"]
  password: "redispass"
  key: "winlogbeat"
  db: 0
  timeout: 5
  data_type: "list"
  ssl:
    enabled: true
    certificate_authorities: ["C:\\Program Data\\Winlogbeat\\ca.crt"]
    insecure: true
    supported_protocols: [TLSv1.1, TLSv1.2]

和 Redis...

tls-port 6380
tls-cert-file /etc/pki/tls/certs/redis.crt
tls-key-file /etc/pki/tls/private/redis.key
tls-ca-cert-file /etc/pki/tls/certs/ca.crt
tls-auth-clients no
tls-protocols "TLSv1.1 TLSv1.2"
tls-prefer-server-ciphers yes

推荐阅读