Logstash-forwarder正在抛出SSL错误

我把这个任务交给了我的同事,这就是背景。

他通过使用在服务器上configurationLogstash的常规方法和所有代理上的Logstash-forwarder,使ELK(Elasticsearch,Logstash和Kibana)堆栈与我们的RHEL 6.2服务器一起工作。 除了两个logstash代理节点之外,一切都按预期正常工作。 它不是从这两个节点索引数据,这两个代理节点与环境中的其他代理略有不同。 所有正在运行的代理正在运行带有“OpenSSL 1.0.0-fips”的RHEL 6.2机器,而两个麻烦的代理正在使用“OpenSSL 0.9.8e-fips-rhel5”运行RHEL 5.5。 现在让我来解释一下这两个节点在开始工作时面临的问题。

当我们用'/etc/init.d/logstash-forwarder restart'重新启动logstash forwarder服务时,会引发以下错误:

2014/10/01 09:21:23.898917与10.xxx握手失败x509:无法validation10.xxx的证书,因为它不包含任何IP SAN 2014/10/01 09:21:24.900502连接到[10 .xxx]:5000(10.xxx)2014/10/01 09:21:24.902081与10.xxx握手失败x509:无法validation10.xxx的证书,因为它不包含任何IP SAN 2014/10 / 01 09:21:25.903970连接到[10.xxx]:5000(10.xxx)2014/10/01 09:21:25.905708与10.xxx握手失败x509:无法validation10.xxx的证书,因为它没有不包含任何IP SAN

我知道这是因为代理尝试使用IP地址通过SSL连接到服务器,所以我再次使用IP SAN重新创build了证书,然后它开始抛出错误,不仅在5.2机器上,而且在6.2机器:

2014/10/03 17:09:12.403253与10.xxx x509握手失败:由未知权威机构签名的证书2014/10/03 17:09:13.404974连接到[10.xxx]:5000(10.xxx)2014 / 10/03 17:09:13.428156 10.xxx x509握手失败:由未知权威签名的证书2014/10/03 17:09:14.429648连接到[10.xxx]:5000(10.xxx)2014 / 10/03 17:09:14.442006与10.xxx x509握手失败:未知权威签署的证书

我尝试通过将新的logstash证书附加到CA文件中,将证书添加到ca-bundle.crt:

'openssl x509 -in certs / logstash-forwarder.crt -text >> certs / ca-bundle.crt'。

我有一种感觉,如果能够将“IP SAN”证书添加到所有代理节点的可信证书列表中,我将能够解决整个问题。 我的问题是:

还有一件事,Logstash服务器正在运行RHEL 6.2。 所有代理节点(正在运行和未运行)都安装了相同版本的logstash-forwarder -logstash-forwarder-0.3.1-1.x86_64.rpm。 使这些代理节点接受IP SAN证书的正确方法是什么? 我正确理解问题吗? RHEL 6.x和RHEL 5.x机器之间有些不兼容吗?

我在/ etc / logstash-forwarder中有以下条目

[root @ name2〜]#cat / etc / logstash-forwarder {“network”:{“servers”:[“10.xxx:5000”],“timeout”:15,“ssl ca”:“/ etc / pki /tls/certs/logstash-forwarder.crt“,”ssl strict verify“:”false“},”files“:[{”paths“:[”/ var / log / maillog“],”fields“键入“:”syslog“}}]} [root @ name2〜]#

提前致谢。

您正在使用的证书没有任何有效的IP SAN,如消息中所述:

Failed to tls handshake with xxxx x509: cannot validate certificate for xxxx because it doesn't contain any IP SANs 

如果使用IP地址连接,则证书必须包含匹配的IP SAN才能通过Go 1.3和更高版本进行validation。 这在任何自述文件或文档中都没有提及(但是?),但在项目github回购中存在一些问题( #226 , #221 )。
要允许IP地址作为服务器名称,SSL证书必须包含作为subjectAltName字段的IP地址。

要解决这个问题,您可以使用以下过程创buildSSL证书和密钥:

  1. 创build一个包含如下输出的文件notsec.cfr (或其他名称):

     [req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] C = TG ST = Togo L = Lome O = Private company CN = * [v3_req] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer basicConstraints = CA:TRUE subjectAltName = @alt_names [alt_names] DNS.1 = * DNS.2 = *.* DNS.3 = *.*.* DNS.4 = *.*.*.* DNS.5 = *.*.*.*.* DNS.6 = *.*.*.*.*.* DNS.7 = *.*.*.*.*.*.* IP.1 = 192.168.1.1 IP.2 = 192.168.69.14 

如果通过主机名进行连接,则可以删除IP SAN,否则添加logstash服务器IP地址。

  1. 使用以下命令(使用来自第1点的文件)创build证书和密钥:

     openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout notsecure.key -out notsecure.crt -config notsec.cnf -days 1825 

这将创build一种通配符证书接受任何主机名和IP地址提到它的文件。 当然,这只是一个简单的例子,你需要根据你的需要调整设置。