Möchte man sich von der Linux-Kommandozeile aus mit Elasticsearch verbinden, so macht man das beispielsweise mit CURL. Der Standardport von Elasticsearch ist hierbei Port 9200:
curl http://localhost:9200
Man kann bzw. sollte jedoch Elasticsearch mit TLS und einem Zertifikat absichern. So geschieht es beispielsweise auch, wenn man den offiziellen elastic-stack auf Basis von Docker laufen hat. Auch in diesem Fall werden von Elastic selbstsignierte Zertifikate verwendet. Loggt man sich in den Elasticsearch-Container per
docker exec -it elasticsearch /bin/bash
ein, kommt man mit einem einfach CURL-Befehl wegen der TLS-Absicherung nicht weiter. Der Fehler
curl: (52) Empty reply from server
ist dann auch schnell nachvollziehbar: Unser Verbindungsversuch erfolgte mittels http und nicht https (denn dieser Docker-Container nutzt ja gesicherte TLS-Verbindungen). Ändern wir nun aber den Verbindungsversuch auf https kommt es zum nächsten Fehler und die Anmeldung an Elasticsearch schlägt fehl:
curl: (60) Peer's Certificate issuer is not recognized.
Das Problem ist ja auch ganz klar: wir versuchen eine gesicherte Verbindung herzustellen, ohne Elastic-Benutzernamen und Schlüssel anzugeben. Hierfür gibt es zwei einfache Lösungen, nämlich erstens das Zertifikat lokal umgehen (nicht empfohlen, aber funktioniert):
curl -u elastic:<IHR-PASSWORT> https://localhost:9200 -k
oder (und empfohlen) den Ort vom Elasticsearch-Zertifikat angeben:
curl -u elastic:<IHR-PASSWORT> https://localhost:9200 --cacert /usr/share/elasticsearch/certs/ca/ca.crt
Anmerkung: <IHR-PASSWORT> wird beim Hochfahren vom Docker-Container erstellt und kann dann eingesehen werden.