Configura tu certificado SSL para usar HTTPS correctamente

Una instalación predeterminada de la aplicación de Looker usa certificados SSL autofirmados para HTTPS. Para los entornos de producción de instancias alojadas por el cliente, recomendamos instalar un certificado SSL de un proveedor de confianza.

Para usar un certificado SSL con Looker, deberás crear un almacén de claves Java con tu certificado y tu clave.

Deberías tener los siguientes archivos:

  • Un archivo de certificado llamado looker.pem que contiene tu certificado principal
  • Un archivo de claves asociado llamado looker.key
  • De manera opcional, un archivo de cadena de autoridad certificadora (AC) intermedio llamado ca.pem

No es necesario que tu archivo .pem contenga un certificado raíz.

Instala el certificado

Todos estos archivos deben existir en el mismo directorio. El valor predeterminado es /home/looker/looker/.ssl.

  1. Crea el directorio nuevo y conviértelo en el directorio actual:

    mkdir /home/looker/looker/.ssl
    cd /home/looker/looker/.ssl
    
  2. Elige una contraseña para el almacén de claves y colócala en un archivo llamado .keystorepass:

    echo "some_password_here" > .keystorepass
    
  3. Si tienes un archivo de AC, adjúntalo al final de tu archivo de certificado:

    echo >> looker.pem
    cat ca.pem >> looker.pem
    
  4. Convierte el certificado y la clave en un almacén de claves pkcs12:

    openssl pkcs12 -export \
        -in looker.pem       \
        -inkey looker.key    \
        -out importme.p12
    
  5. Se te solicitará una contraseña de exportación. Usa el que agregaste al archivo .keystorepass.

  6. Convierte el almacén de claves pkcs12 en un almacén de claves Java:

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. Se te solicitará la nueva contraseña del almacén de claves y la contraseña del almacén de claves pkcs12. Sigue usando el que se encuentra en el archivo .keystorepass.

  8. Crea un archivo llamado lookerstart.cfg en el mismo directorio que tu looker.jar. Este archivo configurará las opciones de Looker necesarias cada vez que se inicie. El archivo debe contener lo siguiente:

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

Valida el certificado

Una vez que Looker esté en ejecución, podrás verificar que tu certificado esté instalado correctamente con OpenSSL s_client.

openssl s_client -connect localhost:9999

Si tu nombre de host es looker.yourdomain.com, deberías ver una línea en el resultado como la siguiente:

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

Otra forma de hacerlo es a través de wget. Esta prueba se puede realizar desde cualquier host que tenga acceso de red a tu instancia de Looker mediante HTTPS.

En un Looker que usa el certificado autofirmado predeterminado, el resultado muestra el nombre común del 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'.

En Looker con un certificado de una autoridad certificadora, el nombre común del certificado debe coincidir con el nombre de DNS que los clientes usan para acceder a Looker (o un certificado comodín equivalente).

Este es un ejemplo de un servidor que usa un certificado "real" (no autofirmado):

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

Cómo validar el certificado de un sitio en comparación con el paquete de AC

A partir de Looker 5.18, Looker usa el paquete de certificados raíz de la autoridad certificadora (CA) de Java. Looker usa el paquete de AC para verificar la autenticidad de los hosts con los que se comunica cuando realiza solicitudes salientes desde el servidor de Looker. Esto incluye acciones como realizar solicitudes a webhooks salientes, realizar copias de seguridad de S3, solicitar varias formas de autenticación y comunicarse con el servidor de verificación de licencias.

Java proporciona y administra el paquete de AC, que reside en el disco. Esto permite que los administradores de instancias de Looker alojadas por el cliente agreguen o quiten certificados del paquete de AC.

Si eliges modificar el paquete de AC, puedes usar la utilidad test_ssl_cert_validation de Looker para probar si Looker puede validar o no un certificado de servidor cuando realiza una conexión HTTP saliente. La utilidad acepta el nombre de un archivo que contiene una lista de URL que quieres probar, con una URL por línea, como esta:

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

Si el nombre de este archivo fuera hosts, usarías test_ssl_cert_validation de la siguiente manera:

$ ./looker test_ssl_cert_validation hosts

El resultado de test_ssl_cert_validation se vería de la siguiente manera:

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

Inhabilitar protocolos SSL no seguros

Para inhabilitar las conexiones entrantes de TSL1.0 a Looker, sigue uno de estos dos métodos:

  • Modifica la línea ssl_protocols en el archivo de configuración Nginx y quita la opción de TLSv1, como se muestra en este fragmento de código:

       ssl-protocols: "TLSv1.2 TLSv1.3"
    
  • Configura un proxy o un balanceador de cargas frente a Looker que finalice el protocolo TLS o SSL. Luego, inhabilita SSL en el nivel de Looker.

Próximos pasos

Después de configurar tu certificado SSL, estará todo listo para agregar la redirección de puertos para obtener una URL más clara.