Bila anda menggunakan setup otomatis pada integrasi dan Kibana, default sertifikat yang dibuat berlaku hanya untuk 2 tahun, setelah 2 tahun kita harus membuat seritifkat baru dengan Root CA baru, atau bisa menggunakan Root CA yang sudah ada. Cara terakhir ini lebih mudah karena kita hanya perlu mengkonfigurasi Elasticsearch, kibana atau service lainnya yang mengakses Elasticsearch tidak akan ada kendala, karena sudah memiliki Root CA di masing-masing service.
Cara disini lebih banyak manual yang harus dikerjakan dengan teliti, hampir semua perintah cukup copy paste. Error yang muncul di Kibana
Unable to retrieve version information from Elasticsearch nodes. certificate has expired
Cek Sertifikat Elasticsearch
Verifikasi certificate yang saat ini digunakan, karena elastic menggunakan type p12/PKCS12 yang diproteksi dengan password, maka kita perlu mengambil password sebelum mengekstrak data sertifikat
/usr/share/elasticsearch/bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
lalu ambil lokasi sertifikat yang digunakan dari /etc/elasticsearch/elasticsearch.yml
xpack.security.http.ssl: enabled: true keystore.path: certs/http.p12
certs/http.p12
berada di /etc/elasticsearch/certs/http.p12
Cek tanggal kadaluarsa/expired sertifikat, gunakan password yang kita ambil sebelumnya
keytool -list -v -keystore /etc/elasticsearch/certs/http.p12 -storetype PKCS12 -storepass PASSWORD | grep 'Issuer:' -A2
Issuer: CN=Elasticsearch security auto-configuration HTTP CA Serial number: df83x41b5d2fcac4ab321b7d1f8fd014093f7140 Valid from: Sat Jun 18 05:19:45 WIB 2022 until: Mon Jun 17 05:19:45 WIB 2024 -- Issuer: CN=Elasticsearch security auto-configuration HTTP CA Serial number: 793f0k054f6ed49z1b7d793e44865f981549bd0e Valid from: Sat Jun 18 05:18:21 WIB 2022 until: Tue Jun 17 05:18:21 WIB 2025 -- Issuer: CN=Elasticsearch security auto-configuration HTTP CA Serial number: 793f0k054f6ed49z1b7d793e44865f981549bd0e Valid from: Sat Jun 18 05:18:21 WIB 2022 until: Tue Jun 17 05:18:21 WIB 2025
dengan curl
curl -v https://localhost:9200 -k
kalo dilihat output dari perintah diatas sertifikat SSL telah expired pada 17 Juni 2024
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server did not agree to a protocol * Server certificate: * subject: CN=elastic-vm * start date: Jun 18 00:48:42 2022 GMT * expire date: Jun 17 00:48:42 2024 GMT * issuer: CN=Elasticsearch security auto-configuration HTTP CA * SSL certificate verify result: self signed certificate in certificate chain (19), continuing anyway.
Ekstrak Sertifikat
Karena elasticsearch tidak menyimpan private key untuk http_ca.crt
, maka kita harus mengekstrak private key dari file http.p12
, agar bisa menggunakan root ca yang sama, sehingga hanya perlu melakukan perubahan disisi Elasticsearch saja.
Saat menjalankan perintah openssl dibawah ini dibeberapa versi openssl anda mungkin perlu menambahkan -legacy
ekstrak Root CA
openssl pkcs12 -cacerts -nokeys -in /etc/elasticsearch/certs/http.p12 -out /tmp/ca-cert.ca -password pass:PASSWORD -passin pass:PASSWORD
gunakan password yang kita ambil ditahap sebelumnya
ambil private key Root CA
openssl pkcs12 -nocerts -in "/etc/elasticsearch/certs/http.p12" -out /tmp/ca.key -password pass:PASSWORD -passin pass:PASSWORD -passout pass:PASSWORD
ada beberapa format private key yang tidak di support oleh elasticsearch-certutil
, agar kompatibel dengan semua format, kita akan menggunakan yang sudah pasti bisa digunakan. Hapus password dari private key Root CA tersebut
openssl rsa -in /tmp/ca.key -out "/tmp/private.key.dec" -passin pass:PASSWORD
Buat Sertifikat Baru
Tahap terakhir dari proses ini adalah membuat sertifikat baru dari Root CA yang digunakan sebelumnya. Jalankan elasticsearch-certutil
untuk memulai proses pembuatan sertifikasi baru
/usr/share/elasticsearch/bin/elasticsearch-certutil http
nanti ada beberapa pertanyaan yang bisa dijawab dengan
Generate a CSR? [y/N] N Use an existing CA? [y/N] y CA Path: /tmp/ca-cert.ca CA Key: /tmp/private.key.dec For how long should your certificate be valid? [5y] 5y Generate a certificate per node? [y/N]N Enter all the hostnames that you need, one per line. When you are done, press <ENTER> once more to move on to the next step. elastic-vm instance-20220608-2217 Enter all the IP addresses that you need, one per line. When you are done, press <ENTER> once more to move on to the next step. 192.1.0.232 Key Name: elastic-vm Subject DN: CN=elastic-vm Key Size: 2048 Do you wish to change any of these options? [y/N]N What filename should be used for the output zip file? [/usr/share/elasticsearch/elasticsearch-ssl-http.zip] {ENTER}
Untuk hostname gunakan hostname yang sama, bisa dilihat dari output curl diatas subject: CN=elastic-vm
ditambah cluster.name
dari /etc/elasticsearch/elasticsearch.yml
. IP Address karena saya menggunakan private IP (Kibana mengakses Elasticsearch dengan IP ini), saya isi dengan private IP saya.
Setelah pembuatan sertifikat baru selesai, ekstrak file elasticsearch-ssl-http.zip
unzip /usr/share/elasticsearch/elasticsearch-ssl-http.zip # output Archive: /usr/share/elasticsearch/elasticsearch-ssl-http.zip creating: elasticsearch/ inflating: elasticsearch/README.txt inflating: elasticsearch/http.p12 inflating: elasticsearch/sample-elasticsearch.yml creating: kibana/ inflating: kibana/README.txt inflating: kibana/elasticsearch-ca.pem inflating: kibana/sample-kibana.yml
copy file elasticsearch/http.p12 ke /etc/elasticsearch/certs/http.p12
mv elasticsearch/http.p12 /etc/elasticsearch/certs/http.p12
lalu restart Elasticsearch
sudo systemctl restart elasticsearch
setelah Elastic jalan, restart Kibana
sudo systemctl restart kibana