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

output dari perintah diatas
elastic search expired certificate

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

Leave a comment

Your email address will not be published. Required fields are marked *