Configurazione del certificato SSL per il corretto protocollo HTTPS

Un'installazione predefinita dell'applicazione Looker utilizza i certificati SSL autofirmati per il protocollo HTTPS. Per ambienti di produzione, è consigliabile 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 certificato principale
  • Un file chiave associato denominato looker.key
  • Facoltativamente, un file di catena di un'autorità di certificazione (CA) intermedi denominato ca.pem

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

Installa il certificato

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

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

    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à chiesta una password per l'esportazione. Usa quello che hai inserito nel file .keystorepass sopra.

  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 verranno chiesti la nuova password dell'archivio chiavi e la password dell'archivio chiavi pkcs12. Continua a utilizzare quella presente nel file .keystorepass.

  8. Crea un file denominato lookerstart.cfg nella stessa directory di looker.jar. Questo file configurerà le opzioni di Looker richieste ogni volta che Looker viene avviato. 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 nome host è looker.yourdomain.com, nell'output dovresti vedere una riga simile alla seguente:

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

Puoi anche controllare con wget. Questo test può essere eseguito da qualsiasi host con accesso di rete alla tua istanza di Looker tramite HTTPS.

In un 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 un Looker che utilizza un certificato di un'autorità di certificazione, il nome comune del certificato deve corrispondere al nome DNS utilizzato dai client per accedere a Looker (o a 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 invia richieste dal server Looker, Sono incluse azioni quali 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 della licenza.

Java fornisce e gestisce il bundle CA, che si trova su disco. Consente agli amministratori di istanze Looker ospitate dal cliente di 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 un certificato del server quando stabilisce una connessione HTTP in uscita. L'utilità accetta il nome di un file contenente un elenco di URL che vuoi testare, con un URL per riga, come riportato di seguito:

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

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

$ ./looker test_ssl_cert_validation hosts

L'output di test_ssl_cert_validation avrebbe il seguente aspetto:

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

Disabilitazione dei protocolli SSL non sicuri

Se devi rimuovere TLS non sicuro per la conformità di sicurezza, aggiungi questa riga al file $JAVA_HOME/lib/security/java.security: none jdk.tls.disabledAlgorithms=SSLv2Hello, SSLv3, TLSv1, TLSv1.1, 3DES_EDE_CBC

Passaggi successivi

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