適切な HTTPS 用の SSL 証明書を構成する

Looker アプリケーションのデフォルトのインストールでは、HTTPS 用に自己署名 SSL 証明書が使用されます。セルフホスト型インスタンスの本番環境では、信頼できるベンダーから SSL 証明書をインストールすることをおすすめします。

SSL 証明書を Looker で使用するには、証明書と鍵を持つ Java キーストアを作成する必要があります。

次のファイルが保存されています。

  • プライマリ証明書を含む looker.pem という名前の証明書ファイル
  • looker.key という名前の関連する鍵ファイル
  • 必要に応じて、ca.pem という名前の中間認証局(CA)チェーン ファイル

.pem ファイルにルート証明書を含める必要はありません。

証明書をインストールする

これらのファイルはすべて同じディレクトリ内に存在する必要があります。デフォルトは /home/looker/looker/.ssl です。

  1. 新しいディレクトリを作成し、それを現在のディレクトリにします。

    mkdir /home/looker/looker/.ssl
    cd /home/looker/looker/.ssl
    
  2. キーストアのパスワードを選択し、.keystorepass というファイルに保存します。

    echo "some_password_here" > .keystorepass
    
  3. CA ファイルがある場合は、証明書ファイルの末尾に追加します。

    echo >> looker.pem
    cat ca.pem >> looker.pem
    
  4. 証明書と鍵を pkcs12 キーストアに変換します。

    openssl pkcs12 -export \
        -in looker.pem       \
        -inkey looker.key    \
        -out importme.p12
    
  5. エクスポート パスワードの入力を求められます。.keystorepass ファイルに保存したものを使用します。

  6. pkcs12 キーストアを Java キーストアに変換します。

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. 新しいキーストアのパスワードと pkcs12 キーストアのパスワードの入力を求められます。引き続き .keystorepass ファイルのものを使用してください。

  8. looker.jar と同じディレクトリに lookerstart.cfg という名前のファイルを作成します。このファイルには、Looker の起動時に毎回必須となる Looker オプションが構成されます。このファイルには、以下のものが含まれている必要があります。

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

証明書を検証する

Looker が実行されたら、OpenSSL s_client を使用して証明書が正しくインストールされていることを確認できます。

openssl s_client -connect localhost:9999

ホスト名が looker.yourdomain.com の場合は、出力に次のような行が表示されます。

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

wget を使用して確認することもできます。このテストは、HTTPS 経由で Looker インスタンスへのネットワーク アクセス権を持つ任意のホストから実行できます。

デフォルトの自己署名証明書を使用している Looker の場合、self-signed.looker.com という証明書の共通名が出力されます。

$ 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'.

認証局が発行した証明書を使用している Looker の場合、証明書の共通名は、クライアントが Looker へのアクセスに使用している DNS 名(または同等のワイルドカード証明書)と一致している必要があります。

「真の」(自己署名したものではない)証明書を使用しているサーバーの例を次に示します。

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

CA バンドルに対するサイトの証明書を検証する

Looker 5.18 以降、Looker では Java 認証局(CA)のルート証明書バンドルが使用されています。Looker サーバーから送信リクエストを行うときの通信に使用するホストの信頼性を検証するために、CA バンドルが使用されます。これには、送信 Webhook へのリクエストの作成、S3 バックアップの実行、さまざまな形式の認証のリクエスト、ライセンス確認サーバーとの通信などのアクションが含まれます。

Java は、ディスク上の CA バンドルを提供、管理します。これにより、セルフホスト型 Looker インスタンスの管理者が、CA バンドルに対する証明書の追加または削除を行うことができます。

CA バンドルを変更する場合、Looker の test_ssl_cert_validation ユーティリティを使用して、送信 HTTP 接続を行うときに Looker がサーバー証明書を検証できるかどうかをテストできます。このユーティリティには、テストする URL を 1 行に 1 つずつ記載したファイルの名前を指定します。

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

このファイルの名前を hosts とした場合、次のように test_ssl_cert_validation を使用します。

$ ./looker test_ssl_cert_validation hosts

test_ssl_cert_validation の出力は次のようになります。

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

安全でない SSL プロトコルの無効化

Looker への受信 TSL1.0 接続を無効にするには、次の 2 つの方法のいずれかを行います。

  • 次のコード スニペットに示すように、Nginx 構成ファイルの ssl_protocols 行を変更し、TLSv1 のオプションを削除する。

       ssl-protocols: "TLSv1.2 TLSv1.3"
    
  • TLS プロトコルまたは SSL プロトコルを終端するプロキシまたはロードバランサを Looker の前に設定する。その後、Looker レベルで SSL を無効にする。

次のステップ

SSL 証明書の設定を終えたら、次はクリーン URL 用のポート転送を追加します。