Como configurar o certificado SSL para HTTPS adequado

Uma instalação padrão do aplicativo Looker usa certificados SSL autoassinados para HTTPS. Em ambientes de produção, recomendamos instalar um certificado SSL de um fornecedor confiável.

Para usar um certificado SSL com o Looker, é necessário 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 da cadeia da autoridade de certificação (CA) intermediária chamado ca.pem

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

Instalar o certificado

Esses arquivos precisam existir no mesmo diretório. O padrão é /home/looker/looker/.ssl.

  1. Crie o novo diretório e o transforme no diretório atual:

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

    echo "some_password_here" > .keystorepass
    
  3. Se você tiver um arquivo de 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. Uma senha de exportação será solicitada. Use o que você inseriu 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ê vai precisar inserir a nova senha do keystore e a senha do keystore pkcs12. Continue usando o do arquivo .keystorepass.

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

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

Validar o certificado

Quando o Looker está em execução, você pode verificar se o certificado foi instalado corretamente com o OpenSSL s_client.

openssl s_client -connect localhost:9999

Caso seu nome do host seja looker.yourdomain.com, você verá uma linha na saída como esta:

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

Também é possível fazer isso com wget. Esse teste pode ser realizado de qualquer host com 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 comum do certificado precisa corresponder ao nome DNS que os clientes usam para acessar o Looker (ou um certificado curinga equivalente).

Veja um exemplo de servidor que usa um certificado "quot;real" (sem assinatura própria)":

$ 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 um certificado do site em relação ao pacote de CA

A partir do Looker 5.18, o Looker usa o pacote de certificado raiz da autoridade de certificação Java (CA). O Looker usa o pacote de CA 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 se comunicar com o servidor de verificação de licença.

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

Se você decidir modificar o pacote de CA, use o utilitário test_ssl_cert_validation do Looker para testar se o Looker pode validar um certificado de servidor ou não ao fazer uma conexão HTTP de saída. O utilitário aceita o nome de um arquivo que contém uma lista de URLs que você quer testar, com um URL por linha, como este:

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

Se o nome desse arquivo fosse hosts, use test_ssl_cert_validation desta forma:

$ ./looker test_ssl_cert_validation hosts

A saída de test_ssl_cert_validation ficará 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

Desativar protocolos SSL não seguros

Se você precisar remover o TLS não seguro para fins de conformidade de segurança, adicione esta linha ao arquivo $JAVA_HOME/lib/security/java.security: none jdk.tls.disabledAlgorithms=SSLv2Hello, SSLv3, TLSv1, TLSv1.1, 3DES_EDE_CBC

Próximas etapas

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