Logstash-forwarder 拋出 SSL 錯誤
我的同事把這項任務交給了我,這就是背景。
通過使用正常方法在伺服器上配置 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 證書和密鑰:
- 創建一個
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 點中的文件):
openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout notsecure.key -out notsecure.crt -config notsec.cnf -days 1825
這將創建一種萬用字元證書,接受任何主機名和該文件中提到的 IP 地址。當然,這只是一個簡單的範例,您需要根據需要調整設置。