2017-10-17 133 views
0

我对整个ELK堆栈颇为陌生,并且我设法设置了filebeat和metricbeat来连接到远程ELK堆栈。全部v6.0.0-rc1为什么filebeat只需要cert和metricbeat需要key,ca和cert?

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" 
+0

我想,filebeat有已经认证配置。 https://www.elastic.co/guide/en/beats/filebeat/current/configuration-output-ssl.html你能错过什么吗? – hkulekci

+0

@steffens了相当深刻的答案:https://discuss.elastic.co/t/why-does-filebeat-only-need-cert-and-metricbeat-need-key-ca-and-cert/104214/4 – gotjosh

回答

1

TLS/SSL使用公共密钥基础设施。需要进行身份验证的服务需要公钥和私钥。另一个端点(验证服务)只需要公钥(或者更好的是只有CA证书 - 公钥)。当默认使用TLS/SSL时,只有客户端连接的'服务器'才会被认证。在这种情况下,beats是客户端,而Logstash是服务器。

此外,服务器可以请求客户机(使用证书)认证它自己。这种方式称为客户端认证,并且必须在服务器(Logstash)中显式启用。启用client-auth后,客户端还需要证书和私钥+服务器需要证书(或CA证书)才能验证/验证客户端。

不管怎么说,使用客户端身份验证时,每个客户端应该有它相匹配的IP /域名自己的客户端证书。 Plus Logstash应该只有CA的公共证书才能进行验证。这归结为具有适当的CA基础设施。

不共用一个端点/机与另一台机器的私钥。

它是不好的做法,将密钥分发给每个metricbeat代理?

确实是这样。

应该是私有密钥有密码吗?

如果可能的话是(如私钥应该被加密),但是这最有可能混淆访问,somewhere the passphrase必须配置的关键都可以使用。如果密钥被盗,加密密钥可以稍微减少损害。

没有客户端身份验证的节拍配置应该是(至少),如:

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

随着客户端身份验证的节拍配置应该是(至少),如:

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: ...