[Tips] Problem Mengaktifkan Kamailio TLS Dengan LetsEncrypt

Jadi barusan nyoba mengaktifkan TLS di SIP server Kamailio saya dengan LetsEncrypt. Pada intinya instalasi sertifikat dengan certbot-auto cukup mudah. Kali ini tinggal menambahkan konfigurasi di tls.cfg di dalam direktori konfigurasi Kamailio:

[server:default]
method = TLSv1
verify_certificate = no
require_certificate = no
certificate = /etc/letsencrypt/live/domain.tld/fullchain.pem
private_key = /etc/letsencrypt/live/domain.tld/privkey.pem

Lalu di file kamailio.cfg SIP server (ip address 192.168.0.123) edit/tambahkan baris berikut:

enable_tls = yes
listen=192.168.0.123:5061

####### TLS Parameters #########
loadmodule "tls.so"
modparam("tls", "config", "/etc/kamailio/tls.cfg")
modparam("tls", "low_mem_threshold1", 0)

Ketika mencoba reload Kamailio, saya mendapati error seperti berikut:

kamailio[18322]: ERROR: tls [tls_domain.c:529]: load_cert(): TLSs: Unable to load certificate file '/etc/letsencrypt/live/domain.tld/fullchain.pem'
kamailio[18322]: ERROR: tls [tls_util.h:42]: tls_err_ret(): load_cert:error:0200100D:system library:fopen:Permission denied
kamailio[18322]: ERROR: tls [tls_util.h:42]: tls_err_ret(): load_cert:error:20074002:BIO routines:FILE_CTRL:system lib
kamailio[18322]: ERROR: tls [tls_util.h:42]: tls_err_ret(): load_cert:error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib
kamailio[18322]: ERROR:  [core/sr_module.c:923]: init_mod_child(): Error while initializing module tls (/usr/lib64/kamailio/modules/tls.so)

f
Karena ada indikasi error yang disebabkan kepemilikan file cert, perlu diubah hak akses file dengan langkah berikut:

root# chmod go+x /etc/letsencrypt/archive
root# chmod go+x /etc/letsencrypt/live

catatan: gunakan sudo juga bukan login sebagai root.

Setelah itu dicoba kembali reload Kamailio dan masalah sudah tidak muncul lagi. Untuk check ,apakah port sudah listen ke TLS, jalankan:

root# ss -ln | egrep "5061"

Links:

[TIPS] Problem Kamailio “contact uri is too long”

Suatu hari saya menemukan masalah Mobile Dialer tidak dapat register ke SIP server kecuali port SIP client diganti ke 5060. Saya pikir firewall SIP server memblokir akses SIP port ke client dari server. Tapi ternyata, saya mendapati error di SIP server sebagai berikut:

kamailio[7968]: WARNING: registrar [sip_msg.c:194]: check_contacts(): contact uri is too long: [sip:021xxxxxxxx@11.2.33.444:48573;app-id=123412341234;pn-type=firebase;pn-tok=fnszKs2QQoA:AbCdEfGHIJkLmNoPQRsTuVwXyZ_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;pn-silent=1;transport=udp]

Secara default panjang maksimal SIP contact URI kamailio diset 255. Kalo kondisi normal sebenarnya baik-baik saja. Tapi kebetulan saya mengaktifkan Google Firebase Cloud Messaging sehingga contact URI menjadi lebih panjang… daaaaann… karena port SIP saya setting random, ada kalanya port SIP client menjadi sepanjang 5 digit. Setelah dihitung, panjang contact URI akan pas 255 kalau port nya 4 digit seperti 5060. Kalo pas kebetulan dapet 48573 seperti di log, akan kelebihan satu digit. Akhirnya di config Kamailio saya tambahkan baris:

modparam("registrar", "contact_max_size", 500)

Lalu setelah reload, akhirnya mobile dialer bisa register dengan lancar