Mengonfigurasi sertifikat SSL Anda untuk HTTPS yang tepat

Penginstalan default aplikasi Looker menggunakan sertifikat SSL yang ditandatangani sendiri untuk HTTPS. Untuk lingkungan produksi instance yang dihosting pelanggan, sebaiknya instal sertifikat SSL dari vendor tepercaya.

Untuk menggunakan sertifikat SSL dengan Looker, Anda harus membuat keystore Java dengan sertifikat dan kunci Anda.

Anda akan memiliki file berikut:

  • File sertifikat bernama looker.pem yang berisi sertifikat utama Anda
  • File kunci terkait bernama looker.key
  • Secara opsional, file rantai Certificate Authority (CA) perantara bernama ca.pem

File .pem Anda tidak perlu berisi root certificate.

Menginstal sertifikat

Semua file ini harus ada di direktori yang sama. Nilai defaultnya adalah /home/looker/looker/.ssl.

  1. Buat direktori baru dan jadikan direktori saat ini:

    mkdir /home/looker/looker/.ssl
    cd /home/looker/looker/.ssl
    
  2. Pilih sandi untuk keystore dan masukkan ke file bernama .keystorepass:

    echo "some_password_here" > .keystorepass
    
  3. Jika Anda memiliki file CA, tambahkan ke akhir file sertifikat Anda:

    echo >> looker.pem
    cat ca.pem >> looker.pem
    
  4. Konversikan sertifikat dan kunci ke keystore pkcs12:

    openssl pkcs12 -export \
        -in looker.pem       \
        -inkey looker.key    \
        -out importme.p12
    
  5. Anda akan diminta untuk memasukkan sandi ekspor. Gunakan perintah yang Anda masukkan ke file .keystorepass di atas.

  6. Konversikan keystore pkcs12 menjadi keystore Java:

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. Anda akan diminta untuk memasukkan sandi keystore baru dan sandi keystore pkcs12. Tetap gunakan kode di file .keystorepass.

  8. Buat file bernama lookerstart.cfg dalam direktori yang sama dengan looker.jar Anda. File ini akan mengonfigurasi opsi Looker yang diperlukan setiap kali Looker dimulai. File harus berisi:

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

Validasi sertifikat

Setelah Looker berjalan, Anda dapat memverifikasi bahwa sertifikat telah diinstal dengan benar menggunakan OpenSSL s_client.

openssl s_client -connect localhost:9999

Jika nama host adalah looker.yourdomain.com, Anda akan melihat baris di output seperti ini:

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

Cara lain untuk memeriksa adalah dengan wget. Pengujian ini dapat dilakukan dari host mana pun yang memiliki akses jaringan ke instance Looker Anda melalui HTTPS.

Pada Looker yang menggunakan sertifikat default yang ditandatangani sendiri, output-nya akan menampilkan nama umum sertifikat 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'.

Pada Looker yang menggunakan sertifikat dari certificate authority, nama umum sertifikat harus cocok dengan nama DNS yang digunakan klien untuk mengakses Looker (atau sertifikat karakter pengganti yang setara).

Berikut adalah contoh server yang menggunakan sertifikat "asli" (ditandatangani tanpa diri sendiri):

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

Memvalidasi sertifikat situs terhadap paket CA

Mulai Looker 5.18, Looker menggunakan paket root certificate Java Certificate Authority (CA). Looker menggunakan paket CA untuk memverifikasi keaslian host yang berkomunikasi dengannya saat membuat permintaan keluar dari server Looker. Hal ini termasuk tindakan seperti membuat permintaan ke webhook keluar, melakukan pencadangan S3, meminta berbagai bentuk autentikasi, dan berkomunikasi dengan server verifikasi lisensi.

Java menyediakan dan mengelola paket CA, yang berada di disk. Hal ini memungkinkan admin instance Looker yang dihosting pelanggan untuk menambahkan atau menghapus sertifikat dari paket CA.

Jika memilih untuk mengubah paket CA, Anda dapat menggunakan utilitas test_ssl_cert_validation Looker untuk menguji apakah Looker dapat memvalidasi sertifikat server saat membuat koneksi HTTP keluar atau tidak. Alat ini menerima nama file yang berisi daftar URL yang ingin Anda uji, dengan satu URL per baris, seperti ini:

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

Jika nama file ini adalah hosts, Anda akan menggunakan test_ssl_cert_validation seperti ini:

$ ./looker test_ssl_cert_validation hosts

Output test_ssl_cert_validation akan terlihat seperti ini:

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

Menonaktifkan protokol SSL yang tidak aman

Jika perlu menghapus TLS yang tidak aman demi kepatuhan keamanan, tambahkan baris ini ke file $JAVA_HOME/lib/security/java.security Anda: none jdk.tls.disabledAlgorithms=SSLv2Hello, SSLv3, TLSv1, TLSv1.1, 3DES_EDE_CBC

Langkah berikutnya

Setelah menyiapkan sertifikat SSL, Anda akan siap untuk menambahkan penerusan port agar URL yang lebih bersih.