我把这个任务交给了我的同事,这是背景。
他使用在服务器上配置 Logstash 和在所有代理上配置 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转发器服务时,它会抛出以下错误:
2014/10/01 09:21:23.898917 无法与 10.xxx x509 tls 握手:无法验证 10.xxx 的证书,因为它不包含任何 IP SAN 2014/10/01 09:21:24.900502 连接到.xxx]:5000 (10.xxx) 2014/10/01 09:21:24.902081 无法与 10.xxx x509 tls 握手:无法验证 10.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 tls 握手:无法验证 10.xxx 的证书,因为它没有'不包含任何 IP SAN
我知道这是因为代理正在尝试使用其 IP 地址通过 SSL 连接到服务器,所以我再次使用 IP SAN 重新创建了证书,然后它开始向我抛出以下错误,不仅是 5.2 机器,还有6.2 机器:
2014/10/03 17:09:12.403253 无法与 10.xxx x509 tls 握手:证书由未知机构签名 2014/10/03 17:09:13.404974 连接到 [10.xxx]:5000 (2014) /10/03 17:09:13.428156 无法与 10.xxx x509 进行 tls 握手:由未知机构签名的证书 2014/10/03 17:09:14.429648 连接到 [10.xxx]:5000 (10.xxx/) 20 10/03 17:09:14.442006 无法与 10.xxx x509 进行 tls 握手:证书由未知机构签名
我尝试通过将新的 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": { " type": "syslog" } } ] } [root@name2 ~]#
提前致谢。
您使用的证书没有消息中提到的任何有效 IP SAN:
Failed to tls handshake with x.x.x.x x509: cannot validate certificate for x.x.x.x because
it doesn't contain any IP SANs
Run Code Online (Sandbox Code Playgroud)
如果您使用 IP 地址进行连接,那么您的证书必须包含匹配的 IP SAN 才能通过 Go 1.3 及更高版本的验证。这不是(还?)在任何 README 文件或文档中提到的,但是在项目 github 存储库中存在一些问题(#226、#221)。
要允许 IP 地址作为服务器名称,SSL 证书必须包含 IP 地址作为subjectAltName
字段。
要解决此问题,您可以使用以下过程来创建 SSL 证书和密钥:
创建一个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
Run Code Online (Sandbox Code Playgroud)如果您通过主机名连接,您可以删除 IP SAN,否则添加您的 logstash 服务器 IP 地址。
使用以下命令创建证书和密钥(使用第 1 点中的文件):
openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout notsecure.key -out notsecure.crt -config notsec.cnf -days 1825
Run Code Online (Sandbox Code Playgroud)这将创建一种接受任何主机名和 IP 地址的通配符证书。当然,这只是一个简单的例子,您需要根据需要调整设置。
归档时间: |
|
查看次数: |
10119 次 |
最近记录: |