Configurazione del certificato SSL per il corretto HTTPS

Un'installazione predefinita dell'applicazione Looker utilizza certificati SSL autofirmati per HTTPS. Per ambienti di produzione di istanze ospitate dal cliente, consigliamo di installare un certificato SSL da un fornitore attendibile.

Per utilizzare un certificato SSL con Looker, devi creare un archivio chiavi Java con il certificato e la chiave.

Dovresti avere i seguenti file:

  • Un file del certificato denominato looker.pem contenente il tuo certificato principale
  • Un file di chiave associato denominato looker.key
  • Facoltativamente, un file della catena di autorità di certificazione (CA) intermedio denominato ca.pem

Il file .pem non deve necessariamente contenere un certificato radice.

Installa il certificato

Questi file devono trovarsi tutti nella stessa directory. Il valore predefinito è /home/looker/looker/.ssl.

  1. Crea la nuova directory e impostala come directory attuale:

    mkdir /home/looker/looker/.ssl
    cd /home/looker/looker/.ssl
    
  2. Scegli una password per l'archivio chiavi e inseriscila in un file denominato .keystorepass:

    echo "some_password_here" > .keystorepass
    
  3. Se hai un file CA, aggiungilo alla fine del file del certificato:

    echo >> looker.pem
    cat ca.pem >> looker.pem
    
  4. Converti il certificato e la chiave in un archivio chiavi pkcs12:

    openssl pkcs12 -export \
        -in looker.pem       \
        -inkey looker.key    \
        -out importme.p12
    
  5. Ti verrà richiesta una password per l'esportazione. Utilizza quello che hai inserito nel file .keystorepass.

  6. Converti l'archivio chiavi pkcs12 in un archivio chiavi Java:

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. Ti verrà richiesta la nuova password dell'archivio chiavi e la password dell'archivio chiavi pkcs12. Continua a usare quello presente nel file .keystorepass.

  8. Crea un file denominato lookerstart.cfg nella stessa directory di looker.jar. Questo file configurerà le opzioni di Looker necessarie a ogni avvio di Looker. Il file deve contenere:

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

Convalida il certificato

Quando Looker è in esecuzione, puoi verificare che il certificato sia installato correttamente con OpenSSL s_client.

openssl s_client -connect localhost:9999

Se il tuo nome host è looker.yourdomain.com, nell'output dovresti vedere una riga simile alla seguente:

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

Un altro modo per controllare è tramite wget. Questo test può essere eseguito da qualsiasi host che abbia accesso di rete alla tua istanza Looker tramite HTTPS.

Su Looker che utilizza il certificato autofirmato predefinito, l'output mostra il nome comune del certificato 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'.

In Looker che utilizza un certificato di un'autorità di certificazione, il nome comune del certificato deve corrispondere al nome DNS che i client utilizzano per accedere a Looker (o un certificato con caratteri jolly equivalente).

Ecco un esempio di un server che utilizza un certificato "reale" (non autofirmato):

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

Convalida del certificato di un sito rispetto al bundle CA

A partire da Looker 5.18, Looker utilizza il bundle di certificati radice dell'autorità di certificazione (CA) Java. Looker utilizza il bundle CA per verificare l'autenticità degli host con cui comunica quando effettua richieste in uscita dal server Looker. Ciò include azioni come l'invio di richieste a webhook in uscita, l'esecuzione di backup S3, la richiesta di varie forme di autenticazione e la comunicazione con il server di verifica delle licenze.

Java fornisce e gestisce il bundle CA che risiede sul disco. In questo modo, gli amministratori delle istanze Looker ospitate dal cliente possono aggiungere o rimuovere certificati dal bundle CA.

Se scegli di modificare il bundle CA, puoi utilizzare l'utilità test_ssl_cert_validation di Looker per verificare se Looker può convalidare o meno un certificato del server quando effettui una connessione HTTP in uscita. L'utilità accetta il nome di un file che contiene un elenco di URL da testare, con un URL per riga, in questo modo:

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

Se il nome di questo file fosse hosts, devi utilizzare test_ssl_cert_validation in questo modo:

$ ./looker test_ssl_cert_validation hosts

L'output di test_ssl_cert_validation sarebbe simile al seguente:

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

Disattivazione dei protocolli SSL non sicuri

Per disabilitare le connessioni TSL1.0 in entrata a Looker, segui uno di questi due metodi:

  • Modifica la riga ssl_protocols nel file di configurazione di Nginx e rimuovi l'opzione per TLSv1, come mostrato in questo snippet di codice:

       ssl-protocols: "TLSv1.2 TLSv1.3"
    
  • Configura un proxy o un bilanciatore del carico davanti a Looker che termina il protocollo TLS o SSL. Quindi, disabilita SSL a livello di Looker.

Passaggi successivi

Dopo aver configurato il certificato SSL, potrai aggiungere il port forwarding per un URL più pulito.