SSL-Zertifikat für die korrekte HTTPS-Nutzung 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 Hauptzertifikat enthält
  • Eine verknüpfte Schlüsseldatei namens looker.key
  • Optional: Eine Datei mit einer Zwischenzertifizierungsstellenkette (Certificate Authority, CA) namens 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 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 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 Schlüsselspeicher-Passwort und das pkcs12-Schlüsselspeicher-Passwort 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. 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 Ihr Zertifikat korrekt 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-Zertifikatpaket der Java-Zertifizierungsstelle (CA). Looker verwendet das Zertifizierungsstellen-Bundle, 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 Server zur Lizenzbestätigung.

Java stellt das CA-Bundle bereit und verwaltet es. Es befindet sich auf dem Laufwerk. Dadurch 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, 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

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

  • Ändern Sie die Zeile ssl_protocols in der 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.