Configura el certificado SSL para HTTPS adecuado

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

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

Deberías tener los siguientes archivos:

  • Un archivo de certificado llamado looker.pem que contiene el certificado principal
  • Un archivo de claves asociado llamado looker.key
  • De manera opcional, un archivo de cadena de autoridad certificada (CA) intermedia 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 haz que sea 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 CA, agrégalo al final del 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 le solicitará una contraseña de exportación. Usa el que agregaste al archivo .keystorepass anterior.

  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 del archivo .keystorepass.

  8. Crea un archivo llamado lookerstart.cfg en el mismo directorio que tu looker.jar. En este archivo, se configurarán las opciones necesarias de Looker cada vez que se inicie Looker. El archivo debe contener la siguiente información:

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 se esté ejecutando, puedes verificar que tu certificado se haya 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 esta:

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

Otra forma de hacerlo es con wget. Esta prueba se puede realizar desde cualquier host que tenga acceso de red a su instancia de Looker a través de 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 un Looker que usa un certificado de una autoridad certificada, 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]

Validando el certificado de un sitio con el paquete de CA

A partir de la versión Looker 5.18, Looker usa el paquete de certificados raíz de la autoridad certificada de Java (CA). Looker usa el paquete de CA 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 CA, que se encuentra en el disco. Esto permite a los administradores de instancias de Looker alojadas por el cliente agregar o quitar certificados del paquete de CA.

Si decides modificar el paquete de CA, 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 deseas 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

Inhabilita protocolos SSL no seguros

Si necesitas quitar TLS inseguras para garantizar el cumplimiento, agrega la siguiente línea a tu archivo $JAVA_HOME/lib/security/java.security: none jdk.tls.disabledAlgorithms=SSLv2Hello, SSLv3, TLSv1, TLSv1.1, 3DES_EDE_CBC

Próximos pasos

Después de configurar el certificado SSL, podrás agregar una redirección de puertos para obtener una URL más limpia.