Configurar o certificado SSL para HTTPS adequado

Uma instalação predefinida da aplicação Looker usa certificados SSL autoassinados para HTTPS. Para ambientes de produção de instâncias alojadas pelo cliente, recomendamos a instalação de um certificado SSL de um fornecedor fidedigno.

Para usar um certificado SSL com o Looker, tem de criar uma keystore Java com o seu certificado e chave.

Deve ter os seguintes ficheiros:

  • Um ficheiro de certificado denominado looker.pem que contém o seu certificado principal
  • Um ficheiro de chave associado denominado looker.key
  • Opcionalmente, um ficheiro de cadeia de autoridade de certificação (AC) intermédio denominado ca.pem

O seu ficheiro .pem não tem de conter um certificado de raiz.

Instale o certificado

Todos estes ficheiros devem existir no mesmo diretório. A predefiniçã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 palavra-passe para o keystore e coloque-a num ficheiro denominado .keystorepass:

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

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

    openssl pkcs12 -export \
        -in looker.pem       \
        -inkey looker.key    \
        -out importme.p12
    
  5. É-lhe pedido uma palavra-passe de exportação. Use o que colocou no ficheiro .keystorepass.

  6. Converta o repositório de chaves pkcs12 num repositório de chaves Java:

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. É-lhe pedido a nova palavra-passe do keystore e a palavra-passe do keystore pkcs12. Continuar a usar o ficheiro .keystorepass.

  8. Crie um ficheiro denominado lookerstart.cfg no mesmo diretório que o ficheiro looker.jar. Este ficheiro configura as opções do Looker necessárias sempre que o Looker é iniciado. O ficheiro deve conter:

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

Valide o certificado

Assim que o Looker estiver em execução, pode verificar se o certificado está instalado corretamente com o OpenSSL s_client.

openssl s_client -connect localhost:9999

Se o seu nome de anfitrião for looker.yourdomain.com, deve ver uma linha na saída semelhante a esta:

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

Outra forma de verificar é com o wget. Este teste pode ser realizado a partir de qualquer anfitrião que tenha acesso à rede à sua instância do Looker através de HTTPS.

Num Looker que use o certificado autoassinado predefinido, o resultado 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'.

Num Looker que use um certificado de uma autoridade de certificação, o nome comum do certificado tem de corresponder ao nome DNS que os clientes usam para aceder ao Looker (ou a um certificado de caráter universal equivalente).

Segue-se um exemplo de um 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]

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

A partir do Looker 5.18, o Looker usa o pacote de certificados de raiz da autoridade de certificação (AC) Java. O Looker usa o pacote de AC para verificar a autenticidade dos anfitriões com os quais comunica quando faz pedidos de saída do servidor do Looker. Isto inclui ações como fazer pedidos a webhooks de saída, fazer cópias de segurança do S3, pedir várias formas de autenticação e comunicar com o servidor de validação de licenças.

O Java fornece e gere o pacote de ACs, que reside no disco. Isto permite que os administradores de instâncias do Looker alojadas pelo cliente adicionem ou removam certificados do pacote de ACs.

Se optar por modificar o pacote de ACs, pode usar a utilidade test_ssl_cert_validation do Looker para testar se o Looker consegue validar um certificado de servidor quando faz uma ligação HTTP de saída. O utilitário aceita o nome de um ficheiro que contém uma lista de URLs que quer testar, com um URL por linha, da seguinte forma:

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

Se o nome deste ficheiro fosse hosts, usaria test_ssl_cert_validation da seguinte forma:

$ ./looker test_ssl_cert_validation hosts

O resultado de test_ssl_cert_validation teria o seguinte aspeto:

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

Desativação de protocolos SSL inseguros

Para desativar as ligações TSL1.0 de entrada ao Looker, siga um destes dois métodos:

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

       ssl-protocols: "TLSv1.2 TLSv1.3"
    
  • Configure um proxy ou um balanceador de carga à frente do Looker que termine o protocolo TLS ou SSL. Em seguida, desative o SSL ao nível do Looker.

Passos seguintes

Depois de configurar o certificado SSL, pode adicionar o encaminhamento de portas para um URL mais limpo.