SSL-Zertifikat für richtiges HTTPS konfigurieren

Bei einer Standardinstallation der Looker-Anwendung werden selbstsignierte SSL-Zertifikate für HTTPS verwendet. Für Produktionsumgebungen mit 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 mit Ihrem Zertifikat und Ihrem Schlüssel einen Java-Schlüsselspeicher 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 Zwischendatei der Zertifizierungsstelle (Certificate Authority, CA) 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 mit dem Namen .keystorepass:

    echo "some_password_here" > .keystorepass
    
  3. Wenn Sie eine CA-Datei haben, hängen Sie diese 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 Exportpasswort einzugeben. Verwenden Sie den Code aus der obigen Datei .keystorepass.

  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 Keystore-Passwort und das pkcs12-Keystore-Passwort einzugeben. Verwenden Sie weiterhin die Adresse in der Datei .keystorepass.

  8. Erstellen Sie eine Datei mit dem Namen lookerstart.cfg im selben Verzeichnis wie Ihre looker.jar. In dieser Datei werden bei jedem Start von Looker die erforderlichen Looker-Optionen 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 enthalten:

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

Sie können das auch mit wget prüfen. Dieser Test kann von jedem Host aus durchgeführt werden, der über HTTPS Netzwerkzugriff auf Ihre Looker-Instanz hat.

Bei Looker, die das selbst signierte Standardzertifikat verwendet, wird in der Ausgabe der allgemeine Name self-signed.looker.com des Zertifikats 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 Looker, das 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, 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 validieren

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

Java stellt das CA-Bundle, das sich auf dem Laufwerk befindet, bereit und verwaltet es. Dadurch können die Administratoren von vom Kunden gehosteten Looker-Instanzen Zertifikate zum 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 bei einer ausgehenden HTTP-Verbindung ein Serverzertifikat validieren kann oder nicht. Das Dienstprogramm akzeptiert den Namen einer Datei, die eine Liste von URLs enthält, die Sie testen möchten. Verwenden Sie dazu eine URL pro Zeile. Beispiel:

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

Wenn der Name der Datei hosts war, 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

Zum Deaktivieren eingehender TSL1.0-Verbindungen zu Looker haben Sie zwei Möglichkeiten:

  • Ä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.

Weitere Informationen

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