SSL-Zertifikat für ordnungsgemäßes HTTPS konfigurieren

In der Standardinstallation der Looker-Anwendung werden selbst signierte SSL-Zertifikate für HTTPS verwendet. Für Produktionsumgebungen 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.

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

  • Eine Zertifikatdatei mit dem Namen looker.pem, die Ihr primäres Zertifikat enthält
  • Eine verknüpfte Schlüsseldatei namens looker.key
  • Optional: eine Zwischenzertifizierungsstelle der Zertifizierungsstelle (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 legen Sie es als aktuelles Verzeichnis fest:

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

  8. Erstellen Sie eine Datei mit dem Namen lookerstart.cfg im selben Verzeichnis wie Ihre looker.jar. Diese Datei konfiguriert die erforderlichen Looker-Optionen bei jedem Start von Looker. Die Datei muss 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 in etwa so aussehen:

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

Eine andere Möglichkeit, das zu prüfen, ist wget. Dieser Test kann von jedem Host mit Netzwerkzugriff auf Ihre Looker-Instanz über HTTPS ausgeführt werden.

In Looker wird das standardmäßige selbst signierte Zertifikat self-signed.looker.com verwendet:

$ 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, der ein Zertifikat von einer Zertifizierungsstelle verwendet, muss der allgemeine Name des Zertifikats mit dem DNS-Namen übereinstimmen, den Clients für den Zugriff auf Looker (oder ein gleichwertiges Platzhalterzertifikat) verwenden.

Hier ein Beispiel für einen Server mit einem (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]

Zertifikat einer Website anhand des CA-Bundles validieren

Ab Looker 5.18 verwendet Looker das Root-Zertifikatpaket 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 beispielsweise Anfragen an ausgehende Webhooks, S3-Sicherungen, verschiedene Authentifizierungsformen und die Kommunikation mit dem Server für die Lizenzüberprüfung.

Java stellt das CA-Bundle zur Verfügung, das sich auf dem Laufwerk befindet, und verwaltet es. Dadurch können die Administratoren der 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 Looker-Dienstprogramm test_ssl_cert_validation testen, ob Looker ein Serverzertifikat validieren kann, wenn eine ausgehende HTTP-Verbindung hergestellt wird. Das Dienstprogramm akzeptiert den Namen einer Datei mit einer Liste von URLs, die Sie testen möchten, und zwar jeweils eine URL pro Zeile:

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

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

$ ./looker test_ssl_cert_validation hosts

Die Ausgabe von test_ssl_cert_validation sieht so aus:

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

Wenn Sie unsicheres TLS aus Sicherheitsgründen entfernen müssen, fügen Sie der Datei $JAVA_HOME/lib/security/java.security die folgende Zeile hinzu: none jdk.tls.disabledAlgorithms=SSLv2Hello, SSLv3, TLSv1, TLSv1.1, 3DES_EDE_CBC

Nächste Schritte

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