設定 SSL 憑證,以便正確使用 HTTPS

Looker 應用程式的預設安裝程序會使用 HTTPS 的自行簽署 SSL 憑證。對於客戶代管執行個體的實際工作環境,我們建議安裝信任供應商提供的 SSL 憑證。

如要在 Looker 中使用 SSL 憑證,您必須使用憑證和金鑰建立 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. 為 KeyStore 選擇密碼,並將密碼放入名為 .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 KeyStore 轉換為 Java KeyStore:

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. 系統會提示您輸入新的 KeyStore 密碼和 PKCS12 KeyStore 密碼。請繼續使用 .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 會在從 Looker 伺服器提出外出要求時,使用 CA 套件驗證與其通訊的主機真實性。這包括向外部 webhook 提出要求、執行 S3 備份、要求各種形式的驗證,以及與授權驗證伺服器進行通訊等動作。

Java 會提供及管理位於磁碟上的 CA 套件。這可讓客戶代管 Looker 執行個體的管理員在 CA 套件中新增或移除憑證。

如果您選擇修改 CA 套件,可以使用 Looker 的 test_ssl_cert_validation 公用程式,測試 Looker 在建立 HTTP 出站連線時,是否能驗證伺服器憑證。這項公用程式可接受檔案名稱,其中包含要測試的網址清單,每行一個網址,如下所示:

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 連線,請按照下列任一方法操作:

  • 修改 Nginx 設定檔中的 ssl_protocols 行,並移除 TLSv1 的選項,如以下程式碼片段所示:

       ssl-protocols: "TLSv1.2 TLSv1.3"
    
  • 在 Looker 前端設定 Proxy 或負載平衡器,以終止 TLS 或 SSL 通訊協定。接著,請在 Looker 層級停用 SSL。

後續步驟

設定 SSL 憑證後,您就可以新增通訊埠轉送,以便取得更簡潔的網址