Logstash

Logstash-forwarder 拋出 SSL 錯誤

  • October 5, 2014

我的同事把這項任務交給了我,這就是背景。

通過使用正常方法在伺服器上配置 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 握手:無法驗證 10.xxx 的證書,因為它不包含任何 IP SAN 2014/10/01 09:21:24.900502 連接到

$$ 10.x.x.x $$:5000 (10.xxx) 2014/10/01 09:21:24.902081 無法與 10.xxx x509 握手:無法驗證 10.xxx 的證書,因為它不包含任何 IP SAN 2014/10/01 09: 21:25.903970 連接到 $$ 10.x.x.x $$:5000 (10.xxx) 2014/10/01 09:21:25.905708 無法與 10.xxx x509 握手:無法驗證 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.x.x.x $$:5000 (10.xxx) 2014/10/03 17:09:13.428156 無法與 10.xxx x509 握手:證書由未知機構簽名 2014/10/03 17:09:14.429648 連接到 $$ 10.x.x.x $$: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.x.x.x:5000” $$,“超時”:15,“ssl ca”:“/etc/pki/tls/certs/logstash-forwarder.crt”,“ssl嚴格驗證”:“假”},“文件”:$$ { “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  

如果您使用 IP 地址進行連接,則您的證書必須包含匹配的 IP SAN 才能通過 Go 1.3 及更高版本的驗證。這在任何 README 文件或文件中都沒有(尚未?)提及,但在項目 github儲存庫中存在一些問題(#226#221 )。

要允許 IP 地址作為伺服器名稱,SSL 證書必須包含 IP 地址作為subjectAltName欄位。

為了解決這個問題,您可以使用以下過程來創建 SSL 證書和密鑰:

  1. 創建一個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 點中的文件):
openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout notsecure.key -out notsecure.crt -config notsec.cnf -days 1825

這將創建一種萬用字元證書,接受任何主機名和該文件中提到的 IP 地址。當然,這只是一個簡單的範例,您需要根據需要調整設置。

引用自:https://serverfault.com/questions/633681