Zum Inhalt springen

CURL und Elasticsearch

Von Michael Wutzke, , aktualisiert

CURL unter Linux: Tipps für die Kommandozeile mit Elasticsearch

Wer sich von der Linux-Kommandozeile aus mit Elasticsearch verbinden will, kann dafür zum Beispiel CURL nutzen. Der Standardport von Elasticsearch ist Port 9200:

curl http://localhost:9200

Elasticsearch lässt sich aber auch mit TLS und einem Zertifikat einrichten, und das sollte man auch. Das ist zum Beispiel der Fall, wenn Sie den offiziellen elastic-stack über Docker nutzen. Auch hier verwendet Elastic selbst signierte Zertifikate. Wenn Sie sich mit

docker exec -it elasticsearch /bin/bash

im Elasticsearch-Container anmelden, kommen Sie wegen der TLS-Verschlüsselung mit einem einfachen CURL-Befehl nicht weiter. Die Fehlermeldung

curl: (52) Empty reply from server

erklärt sich dann fast von selbst: Wir haben uns über http statt über https verbunden, denn dieser Docker-Container nutzt gesicherte TLS-Verbindungen. Stellen wir die Verbindung nun auf https um, kommt der nächste Fehler, und die Anmeldung bei Elasticsearch schlägt wieder fehl:

curl: (60) Peer’s Certificate issuer is not recognized.

Das Problem ist klar: Wir versuchen, eine sichere Verbindung aufzubauen, ohne den Elastic-Benutzernamen und einen Schlüssel anzugeben. Dafür gibt es zwei einfache Lösungen. Erstens können wir das Zertifikat lokal umgehen (nicht empfohlen, aber es funktioniert):

curl -u elastic: https://localhost:9200 -k

Oder wir geben den Speicherort des Elasticsearch-Zertifikats an, das ist der empfohlene Weg:

curl -u elastic: https://localhost:9200 —cacert /usr/share/elasticsearch/certs/ca/ca.crt

Hinweis: erzeugt der Docker-Container beim Start, danach können Sie es einsehen.