配置 SSL 证书以实现适当的 HTTPS

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 服务器发出出站请求时,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 前面设置一个代理或负载均衡器,用于终止 TLS 或 SSL 协议。然后,在 Looker 级别停用 SSL。

后续步骤

设置 SSL 证书后,您就可以为更简洁的网址添加端口转发了。