为什么filebeat只需要cert和metricbeat需要key,ca和cert?

时间:2017-10-17 11:47:36

标签: elasticsearch logstash elastic-stack

我对整个ELK堆栈都很陌生,我只是设法将filebeat和metricbeat设置为连接到远程ELK堆栈。所有v6.0.0-rc1

SSL设置让我有点困惑,我留下了一个问题: 为什么filebeat只需要cert和metricbeat需要key,ca和cert?

filebeat.yml

ssl:
  certificate_authorities:
    - /host/certs/logstash-beats.crt

metricbeat.yml:

output.logstash:
    hosts: ["host.url:5044"] 
    ssl.certificate_authorities: ["/host/certs/reporter-ca.crt"]
    ssl.certificate: "/host/certs/reporter.crt"
    ssl.key: "/host/certs/reporter-private.key"

1 个答案:

答案 0 :(得分:2)

TLS / SSL使用公钥基础结构。需要进行身份验证的服务需要公钥和私钥。另一个端点(验证服务)只需要公钥(甚至更好的只需要CA证书 - 公钥)。默认情况下使用TLS / SSL时,只会验证客户端连接的“服务器”。在这种情况下,节拍是客户端,Logstash是服务器。

此外,服务器可以请求客户端进行身份验证(使用证书)。此模式称为客户端身份验证,必须在服务器(Logstash)中显式启用。启用客户端身份验证后,客户端还需要证书和私钥+服务器需要证书(或CA证书)才能验证/验证客户端。

无论如何,当使用client-auth时,每个客户端都应该拥有自己的客户端证书,其中包含匹配的IP /域名。 Plus Logstash应该只有CA公共证书进行验证。这归结为拥有适当的CA基础架构。

永远不要与另一台机器共享端点/机器的私钥。

  

将私钥分发给每个metricbeat代理是不好的做法吗?

确实是。

  

该私钥是否应该有密码?

如果可能的话(因为私钥应该被加密),但这种最有可能是混淆的访问,因为必须配置somewhere the passphrase,因此可以使用密钥。尽管如此,如果密钥被盗,加密密钥可以在一定程度上减少损失。

如果没有客户端身份验证,beats配置应该(至少)像:

output.logstash:
    hosts: ["host.url:5044"] 
    ssl.certificate_authorities:
    - /host/certs/logstash-beats.crt

使用客户端身份验证时,beats配置应该(至少)如:

output.logstash:
    hosts: ["host.url:5044"] 
    ssl.certificate_authorities:
    - /host/certs/logstash-beats.crt
    ssl.certificate: "/host/certs/reporter.crt"
    ssl.key: "/host/certs/reporter-private.key"
    ssl.key_passphrase: ...