Como configurar seu certificado SSL para HTTPS adequado

Uma instalação padrão do aplicativo Looker usa certificados SSL autoassinados para HTTPS. Para ambientes de produção de instâncias hospedadas pelo cliente, recomendamos a instalação de um certificado SSL de um fornecedor confiável.

Para usar um certificado SSL com o Looker, você precisa criar um keystore Java com seu certificado e sua chave.

Você deve ter os seguintes arquivos:

  • Um arquivo de certificado chamado looker.pem que contém seu certificado principal
  • Um arquivo de chave associado chamado looker.key
  • Opcionalmente, um arquivo de cadeia de autoridade de certificação (CA, na sigla em inglês) intermediário chamado ca.pem

Seu arquivo .pem não precisa conter um certificado raiz.

Instalar o certificado

Todos esses arquivos precisam estar no mesmo diretório. O padrão é /home/looker/looker/.ssl.

  1. Crie o novo diretório e torne-o o diretório atual:

    mkdir /home/looker/looker/.ssl
    cd /home/looker/looker/.ssl
    
  2. Escolha uma senha para o keystore e a coloque em um arquivo chamado .keystorepass:

    echo "some_password_here" > .keystorepass
    
  3. Se você tiver um arquivo CA, anexe-o ao final do arquivo de certificado:

    echo >> looker.pem
    cat ca.pem >> looker.pem
    
  4. Converta o certificado e a chave em um keystore pkcs12:

    openssl pkcs12 -export \
        -in looker.pem       \
        -inkey looker.key    \
        -out importme.p12
    
  5. Você precisará digitar uma senha de exportação. Use a que você colocou no arquivo .keystorepass acima.

  6. Converta o keystore pkcs12 em um keystore Java:

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. Você será solicitado a inserir a nova senha do keystore e a senha do keystore pkcs12. Continue usando a que está no arquivo .keystorepass.

  8. Crie um arquivo chamado lookerstart.cfg no mesmo diretório que looker.jar. Esse arquivo vai configurar as opções necessárias do Looker sempre que ele for iniciado. O arquivo precisa conter:

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

Validar o certificado

Quando o Looker estiver em execução, use o OpenSSL s_client para verificar se o certificado está instalado corretamente.

openssl s_client -connect localhost:9999

Se o nome do host for looker.yourdomain.com, será exibida uma linha como esta na saída:

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

Outra maneira de verificar é usando wget. Esse teste pode ser realizado em qualquer host que tenha acesso de rede à sua instância do Looker via HTTPS.

Em um Looker que usa o certificado autoassinado padrão, a saída mostra o nome comum do certificado 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'.

Em um Looker que usa um certificado de uma autoridade certificadora, o nome real do certificado precisa corresponder ao nome DNS que os clientes usam para acessar o Looker (ou um certificado de caractere curinga equivalente).

Veja um exemplo de servidor que usa um certificado "real" (não autoassinado):

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

Como validar o certificado de um site em relação ao pacote de ACs

A partir da versão 5.18, ele usa o pacote de certificados raiz da autoridade de certificação (CA) do Java. O Looker usa o pacote de AC para verificar a autenticidade dos hosts com que se comunica ao fazer solicitações de saída do servidor do Looker. Isso inclui ações como fazer solicitações para webhooks de saída, fazer backups do S3, solicitar várias formas de autenticação e comunicar-se com o servidor de verificação de licença.

O Java fornece e gerencia o pacote de CAs, que reside no disco. Isso permite que os administradores de instâncias do Looker hospedadas pelo cliente adicionem ou removam certificados do pacote de CAs.

Se você modificar o pacote de CAs, use o utilitário test_ssl_cert_validation do Looker para testar se ele pode validar um certificado do servidor ao fazer uma conexão HTTP de saída. O utilitário aceita o nome de um arquivo que contenha uma lista de URLs que você deseja testar, com um URL por linha, assim:

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

Se o nome desse arquivo for hosts, você usaria test_ssl_cert_validation desta forma:

$ ./looker test_ssl_cert_validation hosts

A saída de test_ssl_cert_validation ficaria assim:

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

Como desativar protocolos SSL não seguros

Para desativar as conexões de entrada do TSL1.0 para o Looker, siga um destes dois métodos:

  • Modifique a linha ssl_protocols no arquivo de configuração do Nginx e remova a opção de TLSv1, conforme mostrado neste snippet de código:

       ssl-protocols: "TLSv1.2 TLSv1.3"
    
  • Configurar um proxy ou balanceador de carga no Looker para encerrar o protocolo TLS ou SSL. Em seguida, desative o SSL no nível do Looker.

Próximas etapas

Depois de configurar seu certificado SSL, você vai poder adicionar o encaminhamento de portas para um URL mais limpo.