SSL-Zertifikat für die korrekte HTTPS-Nutzung konfigurieren

Bei einer Standardinstallation der Looker-Anwendung werden selbst signierte SSL-Zertifikate für HTTPS verwendet. Für Produktionsumgebungen von vom Kunden gehosteten Instanzen empfehlen wir die Installation eines SSL-Zertifikats von einem vertrauenswürdigen Anbieter.

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

Sie sollten die folgenden Dateien haben:

  • Eine Zertifikatsdatei mit dem Namen looker.pem, die Ihr Hauptzertifikat enthält
  • Eine zugehörige Schlüsseldatei mit dem Namen looker.key
  • Optional: Eine Datei mit einer Zwischenzertifizierungsstellenkette (Certificate Authority, CA) mit dem Namen ca.pem

Ihre .pem-Datei muss kein Stammzertifikat 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 geben Sie es in die Datei .keystorepass ein:

    echo "some_password_here" > .keystorepass
    
  3. Wenn Sie eine CA-Datei haben, hängen Sie sie an das Ende der 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 Exportpasswort einzugeben. Verwenden Sie die Adresse, die Sie in die Datei .keystorepass eingefügt haben.

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

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

  8. Erstellen Sie eine Datei mit dem Namen lookerstart.cfg im selben Verzeichnis wie Ihre looker.jar-Datei. In dieser Datei werden die erforderlichen Looker-Optionen jedes Mal konfiguriert, wenn Looker gestartet wird. 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 das Zertifikat richtig installiert ist.

openssl s_client -connect localhost:9999

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

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

Eine weitere Möglichkeit ist wget. Dieser Test kann von jedem Host ausgeführt werden, der über HTTPS Netzwerkzugriff auf Ihre Looker-Instanz hat.

In Looker, in dem das standardmäßige selbst signierte Zertifikat verwendet wird, wird in der Ausgabe der gemeinsame 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'.

Bei einem Looker-Server, der ein Zertifikat von einer Zertifizierungsstelle verwendet, muss der Common Name des Zertifikats mit dem DNS-Namen übereinstimmen, über den Clients auf Looker zugreifen (oder mit einem entsprechenden Platzhalterzertifikat).

Hier ein Beispiel für einen Server, der ein „echtes“ (nicht selbst signiertes) Zertifikat verwendet:

$ 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]

Zertifikat einer Website anhand des CA-Bundles prüfen

Ab Looker 5.18 verwendet Looker das Root-Zertifikatspaket der Java-Zertifizierungsstelle. Looker verwendet das CA-Bundle, um die Authentizität der Hosts zu überprü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 Server zur Lizenzbestätigung.

Java stellt das CA-Bundle bereit und verwaltet es. Es befindet sich auf dem Laufwerk. So können die Administratoren von vom Kunden gehosteten Looker-Instanzen Zertifikate zum oder aus dem CA-Bundle hinzufügen oder daraus entfernen.

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

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

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

$ ./looker test_ssl_cert_validation hosts

Die Ausgabe von test_ssl_cert_validation würde dann 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

So 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 dann SSL auf Looker-Ebene.

Nächste Schritte

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