SSL-Zertifikat für korrektes HTTPS konfigurieren

Eine Standardinstallation der Looker-Anwendung verwendet selbstsignierte SSL-Zertifikate für HTTPS. In Produktionsumgebungen mit vom Kunden gehosteten Instanzen empfiehlt es sich, ein SSL-Zertifikat von einem vertrauenswürdigen Anbieter zu installieren.

Um ein SSL-Zertifikat mit Looker zu verwenden, müssen Sie einen Java-Schlüsselspeicher mit Ihrem Zertifikat und Ihrem Schlüssel erstellen.

Insgesamt sollten Sie über die folgenden Dateien verfügen:

  • Eine Zertifikatsdatei mit dem Namen looker.pem, die Ihr primäres Zertifikat enthält
  • Eine verknüpfte Schlüsseldatei namens looker.key
  • Optional: eine Zwischen-CA-Kettendatei mit dem Namen ca.pem

Die Datei .pem muss kein Root-Zertifikat enthalten.

Zertifikat installieren

Diese Dateien sollten sich alle im selben Verzeichnis befinden. Der Standardwert ist /home/looker/looker/.ssl.

  1. Erstellen Sie das neue Verzeichnis und machen Sie es zum aktuellen Verzeichnis:

    mkdir /home/looker/looker/.ssl
    cd /home/looker/looker/.ssl
    
  2. Wählen Sie ein Passwort für den Schlüsselspeicher aus und speichern Sie es in einer Datei namens .keystorepass:

    echo "some_password_here" > .keystorepass
    
  3. Wenn Sie eine CA-Datei haben, hängen Sie sie an das Ende Ihrer Zertifikatsdatei an:

    echo >> looker.pem
    cat ca.pem >> looker.pem
    
  4. Konvertieren Sie das Zertifikat und den Schlüssel in einen pkcs12-Schlüsselspeicher:

    openssl pkcs12 -export \
        -in looker.pem       \
        -inkey looker.key    \
        -out importme.p12
    
  5. Sie werden aufgefordert, ein Passwort für den Export einzugeben. Verwenden Sie die ID aus der Datei .keystorepass.

  6. Konvertieren Sie den Schlüsselspeicher pkcs12 in einen Java-Schlüsselspeicher:

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. Sie werden aufgefordert, das neue Schlüsselspeicher-Passwort und das pkcs12-Schlüsselspeicher-Passwort einzugeben. Verwende weiterhin die in der Datei .keystorepass.

  8. Erstellen Sie eine Datei mit dem Namen lookerstart.cfg im selben Verzeichnis wie Ihre looker.jar. Mit dieser Datei werden die erforderlichen Looker-Optionen bei jedem Start von Looker konfiguriert. Die Datei sollte Folgendes enthalten:

LOOKERARGS="--ssl-keystore=/home/looker/looker/.ssl/looker.jks --ssl-keystore-pass-file=/home/looker/looker/.ssl/.keystorepass"

Zertifikat validieren

Sobald Looker ausgeführt wird, können Sie mit OpenSSL s_client prüfen, ob Ihr Zertifikat korrekt installiert ist.

openssl s_client -connect localhost:9999

Wenn Ihr Hostname looker.yourdomain.com ist, sollte die Ausgabe eine Zeile wie diese sehen:

subject=/OU=Domain Control Validated/CN=looker.yourdomain.com

Du kannst dies auch mit wget prüfen. Dieser Test kann von jedem Host aus durchgeführt werden, der über HTTPS Netzwerkzugriff auf Ihre Looker-Instanz hat.

Auf Looker-Geräten mit dem standardmäßigen selbst signierten Zertifikat wird in der Ausgabe der allgemeine Name des Zertifikats self-signed.looker.com angezeigt:

$ wget https://looker.yourdomain.com:9999
--2014-12-31 12:06:03--  https://looker.yourdomain.com:9999/
Resolving looker.yourdomain.com (looker.yourdomain.com)... 192.168.23.66
Connecting to looker.yourdomain.com (looker.yourdomain.com)|192.168.23.66|:9999... connected.
ERROR: cannot verify looker.yourdomain.com's certificate, issued by '/CN=self-signed.looker.com':
  Self-signed certificate encountered.
    ERROR: certificate common name 'self-signed.looker.com' doesn't match requested host name 'looker.yourdomain.com'.
To connect to looker.yourdomain.com insecurely, use `--no-check-certificate'.

Auf einem Looker, der ein Zertifikat einer Zertifizierungsstelle verwendet, muss der allgemeine Name des Zertifikats mit dem DNS-Namen übereinstimmen, den Clients für den Zugriff auf Looker verwenden (oder ein entsprechendes Platzhalterzertifikat).

Hier ist ein Beispiel für einen Server mit einem "echten" (nicht selbst signierten) Zertifikat:

$ wget https://looker.yourdomain.com:9999
--2014-12-31 12:06:47--  https://looker.yourdomain.com:9999/
Resolving looker.yourdomain.com (looker.yourdomain.com)... 10.10.10.10
Connecting to looker.yourdomain.com (looker.yourdomain.com)|10.10.10.10|:9999... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://looker.yourdomain.com:9999/login [following]
--2014-12-31 12:06:48--  https://looker.yourdomain.com:9999/login
Connecting to looker.yourdomain.com (looker.yourdomain.com)|10.10.10.10|:9999... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3491 (3.4K) [text/html]
Saving to: 'index.html'

100%[====================================================>] 3,491       --.-K/s   in 0.07s

2014-12-31 12:06:48 (50.5 KB/s) - 'index.html' saved [3491/3491]

Websitezertifikat mit dem CA-Paket validieren

Ab Looker 5.18 verwendet Looker das Root-Zertifikatpaket der Java-Zertifizierungsstelle (CA). Looker verwendet das CA-Paket, um die Authentizität der Hosts zu prüfen, mit denen es bei ausgehenden Anfragen vom Looker-Server kommuniziert. Dazu gehören Aktionen wie das Senden von Anfragen an ausgehende Webhooks, das Ausführen von S3-Sicherungen, das Anfordern verschiedener Authentifizierungsformen und die Kommunikation mit dem Lizenzüberprüfungsserver.

Java stellt das CA-Paket bereit und verwaltet es, das sich auf der Festplatte befindet. Auf diese Weise können die Administratoren von vom Kunden gehosteten Looker-Instanzen Zertifikate zum CA-Paket hinzufügen oder daraus entfernen.

Wenn Sie das CA-Bundle ändern möchten, können Sie mit dem test_ssl_cert_validation-Dienstprogramm von Looker testen, ob Looker bei einer ausgehenden HTTP-Verbindung ein Serverzertifikat validieren kann. Das Dienstprogramm akzeptiert den Namen einer Datei, die eine Liste der zu testenden URLs mit einer URL pro Zeile enthält. Beispiel:

https://www.google.com
https://looker.com
https://wrong.host.badssl.com/

Wenn der Name dieser Datei hosts lautet, würden Sie test_ssl_cert_validation so verwenden:

$ ./looker test_ssl_cert_validation hosts

Die Ausgabe von test_ssl_cert_validation würde so aussehen:

Using CA file from .../jre/lib/security/cacerts

Attempting connection to https://www.google.com
Certificate verified successfully, connection returned with:
HTTP/1.1 200 OK

Attempting connection to https://looker.com
Certificate verified successfully, connection returned with:
HTTP/1.1 200 OK

Attempting connection to https://wrong.host.badssl.com/
Error connecting to https://wrong.host.badssl.com/: OpenSSL::SSL::SSLError: hostname
"wrong.host.badssl.com" does not match the server certificate

Summary:
Successes: 3, Redirects: 0, Failures: 1

Unsichere SSL-Protokolle deaktivieren

Mit einer der folgenden Methoden deaktivieren Sie eingehende TSL1.0-Verbindungen zu Looker:

  • Ändern Sie die Zeile ssl_protocols in Ihrer Nginx-Konfigurationsdatei und entfernen Sie die Option für TLSv1, wie in diesem Code-Snippet gezeigt:

       ssl-protocols: "TLSv1.2 TLSv1.3"
    
  • Richten Sie vor Looker einen Proxy oder Load Balancer ein, der das TLS- oder SSL-Protokoll beendet. Deaktivieren Sie SSL dann auf Looker-Ebene.

Weitere Informationen

Nachdem Sie Ihr SSL-Zertifikat eingerichtet haben, können Sie eine Portweiterleitung für eine sauberere URL hinzufügen.