Próbuję skonfigurować usługę przesyłania dalej logstash, ale mam problemy z utworzeniem odpowiedniego bezpiecznego kanału. Próba skonfigurowania tego na dwóch maszynach Ubuntu (serwer 14.04) działających w virtualbox. Są w 100% czyste (nie dotknęły pliku hosts ani nie zainstalowały żadnych innych pakietów niż wymagana Java, ngix, elastisearch itp. Do logstash)
Nie wierzę, że jest to problem z logstash, ale niewłaściwa obsługa certyfikatów lub coś niepoprawnie ustawione na Ubuntu logstash lub maszynie do przesyłania dalej.
Wygenerowałem klucze:
sudo openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
Moje wejście conf na serwerze logstash:
input {
lumberjack {
port => 5000
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
Klucze zostały skopiowane do hosta przekazującego , który ma następującą konfigurację.
{
"network": {
"servers": [ "192.168.2.107:5000" ],
"timeout": 15,
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
"ssl key": "/etc/pki/tls/certs/logstash-forwarder.key"
},
"files": [
{
"paths": [
"/var/log/syslog",
"/var/log/auth.log"
],
"fields": { "type": "syslog" }
}
]
}
Po uruchomieniu serwera logstash uruchamiam „sudo service logstash-forwarder start” na maszynie przekazującej, co powoduje następujący powtarzający się błąd:
Jul 9 05:06:21 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:21.589762 Connecting to [192.168.2.107]:5000 (192.168.2.107)
Jul 9 05:06:21 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:21.595105 Failed to tls handshake with 192.168.2.107 x509: cannot validate certificate for 192.168.2.107 because it doesn't contain any IP SANs
Jul 9 05:06:22 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:22.595971 Connecting to [192.168.2.107]:5000 (192.168.2.107)
Jul 9 05:06:22 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:22.602024 Failed to tls handshake with 192.168.2.107 x509: cannot validate certificate for 192.168.2.107 because it doesn't contain any IP SANs
Jak wspomniałem wcześniej, nie sądzę, że jest to problem związany z logstash, ale problem z konfiguracją certyfikatu / komputera. Problem polega na tym, że nie mogę tego rozwiązać. Mam nadzieję, że niektóre sprytne umysły mogą mi pomóc?
Dzięki
openssl x509 -text
Z certyfikatu zainstalowanego na serwerze. Sprawdź równieżopenssl s_client
, czy serwer zwraca oczekiwany certyfikat i użyj-CApath
z s_client, aby sprawdzić, czy łańcuch zaufania można zweryfikować względem skonfigurowanego urzędu certyfikacji.Istnieje skrypt do tworzenia odpowiednich certyfikatów dla drwala, który został wspomniany na bilecie github logstash: Uzgadnianie SSL kończy się niepowodzeniem, ponieważ brakuje SAN IP
Pobierz plik:
curl -O https://raw.githubusercontent.com/driskell/log-courier/1.x/src/lc-tlscert/lc-tlscert.go
...Zbuduj to:
..i biegnij:
źródło
Miałem z tym prawdziwy problem. Nie używam logstash, po prostu próbowałem zmusić IP SAN do pracy z tl dokerem. Utworzyłbym certyfikat zgodnie z opisem w artykule dokera na https ( https://docs.docker.com/articles/https/ ), a następnie, gdy łączyłem się z klienta dokera:
Otrzymałbym ten błąd:
co doprowadzało mnie do szału. Przyznaję, potykam się we wszystkich rzeczach, więc każdy może już wiedzieć, co odkryłem. Przykład subjectAltName tutaj (i gdziekolwiek indziej) pokazuje aktualizację pliku openssl.cnf. Nie mogłem tego uruchomić. Zrobiłem lokalizację na openssl.cnf, skopiowałem ją do lokalnego katalogu, a następnie wprowadziłem zmiany. Kiedy sprawdziłem certyfikat, nie zawierał on rozszerzenia:
Komenda używana do utworzenia tego certyfikatu znajduje się tutaj (z artykułu dokera):
Nie można dodać wiersza -config openssl.cnf do tego polecenia, jest ono niepoprawne. Nie możesz również skopiować pliku openssl.cnf do bieżącego katalogu, zmodyfikować go i mieć nadzieję, że zadziała w ten sposób. Kilka wierszy później zauważyłem, że „klient” cert używa pliku-tekstowego extfile.cnf. Próbowałem więc:
i to naprawiło. Tak więc, z jakiegokolwiek powodu moja wersja openssl nie pozwalała mi modyfikować pliku openssl.cnf, ale mogłem określić podmiotAltName w ten sposób. Działa świetnie!
Możesz podać dowolną liczbę adresów IP, takich jak IP: 127.0.0.1, IP: 127.0.1.1 (również nie lokalny host).
źródło
Szybka poprawka znajduje się powyżej w rozwiązaniu @Steffen Ullrich.
Jest także problem / dyskusja na ten temat w github projektu logstash-forwarder . Zobacz (wkrótce, ponieważ obecnie trwają prace nad nim), aby uzyskać łatwiejsze rozwiązanie.
źródło