Belajar SSL dengan OpenSSL di Debian 13: Bangun CA Sendiri untuk HTTPS, Mail Server, Webmail, dan Active Directory
Pernah membuka website lab dan disambut peringatan “Your connection is not private”? Banyak admin langsung klik Proceed anyway dan melanjutkan hidup. Kebiasaan itu berbahaya, karena peringatan yang selalu diabaikan membuat pengguna tidak bisa lagi membedakan koneksi yang aman dari yang disadap.
Di artikel ini kita membangun infrastrukturnya dengan benar. Kita buat Certificate Authority (CA) sendiri memakai OpenSSL, lalu menerbitkan sertifikat untuk dua server layanan: web server dengan webmail, dan mail server. Kita juga bahas kebutuhan sertifikat untuk LDAPS pada Active Directory. Semuanya berjalan di Debian 13 (Trixie).
Artikel ini cocok untuk siswa SMK TKJ yang menyiapkan UKK atau LKS ITNSA, dan untuk sysadmin yang ingin memahami mekanisme TLS dari dalam, bukan sekadar menyalin perintah.
Mengapa Memahami SSL/TLS Itu Penting
Istilah “SSL” sudah dipakai secara kebiasaan. Protokol yang sebenarnya aktif hari ini adalah TLS (Transport Layer Security). SSL 2.0/3.0 sudah usang dan tidak boleh dipakai. Kita tetap memakai kata “SSL” karena orang mencarinya begitu, tetapi yang kita konfigurasi adalah TLS 1.2 dan TLS 1.3.
TLS memberi tiga jaminan:
- Confidentiality: data dienkripsi, sehingga password webmail tidak terbaca di jaringan.
- Integrity: data tidak bisa diubah di tengah jalan tanpa ketahuan.
- Authentication: klien yakin sedang bicara dengan server asli, bukan penipu.
Poin ketiga sering dilupakan. Enkripsi tanpa autentikasi hanya berarti kita terenkripsi dengan siapa pun, termasuk penyerang. Di sinilah CA berperan.
Analogi sederhana: sertifikat itu seperti KTP server. CA adalah Dukcapil yang menerbitkannya. Kita percaya KTP karena kita percaya institusi penerbitnya. Kalau kita membuat “Dukcapil” sendiri, hanya perangkat yang sudah diberi tahu untuk memercayainya yang akan menerima KTP tersebut. Itulah yang disebut trust distribution.
Kapan Pakai CA Internal, Kapan Pakai CA Publik
| Kebutuhan | Pilihan |
|---|---|
| Lab, praktikum, jaringan internal | CA internal (OpenSSL) |
| Layanan internal kampus/perusahaan | CA internal (idealnya AD CS, step-ca, atau EJBCA) |
| Website yang diakses publik | CA publik (mis. Let’s Encrypt) |
OpenSSL cocok untuk belajar dan lab. Untuk production skala besar, pertimbangkan tooling CA yang punya audit, otomasi, dan manajemen siklus hidup sertifikat.
Topologi dan Rencana Implementasi
+---------------------------+
| ca.lab.local |
| 192.168.10.10 |
| Root CA (OpenSSL) |
+-------------+-------------+
| menandatangani CSR
+---------------+----------------+
| |
+------------v-----------+ +-------------v------------+
| Server 1 (web) | | Server 2 (mail) |
| web.lab.local | | mail.lab.local |
| 192.168.10.11 | | 192.168.10.12 |
| Nginx HTTPS + Roundcube| | Postfix + Dovecot |
| webmail.lab.local | | (+ opsional: LDAPS AD) |
+------------------------+ +--------------------------+
Asumsi (Lab): tiga VM Debian 13 di jaringan 192.168.10.0/24, domain lab.local, resolusi nama lewat /etc/hosts atau DNS internal. Kita memakai satu Root CA agar mudah dipelajari. Di production, root CA dibuat offline dan hanya menandatangani Intermediate CA.
Alur kerjanya selalu sama untuk setiap layanan:
- Server membuat private key sendiri.
- Server membuat CSR (Certificate Signing Request).
- CSR dikirim ke CA, lalu CA menandatangani dan menghasilkan sertifikat.
- Sertifikat dipasang di layanan.
- Klien diberi sertifikat root CA supaya memercayainya.
Private key server tidak pernah meninggalkan server. Hanya CSR yang dikirim.
Langkah 1: Persiapan Dasar
Di ketiga server:
sudo apt update
sudo apt install -y openssl ca-certificates
openssl version
timedatectl status
Pastikan waktu sinkron. Sertifikat punya masa berlaku, dan jam yang melenceng membuat sertifikat valid terlihat “belum berlaku” atau “kedaluwarsa”. Atur juga /etc/hosts di semua node:
192.168.10.10 ca.lab.local
192.168.10.11 web.lab.local webmail.lab.local
192.168.10.12 mail.lab.local
Langkah 2: Membangun Root CA di Server CA
Semua langkah ini dijalankan di ca.lab.local sebagai root (sudo -i).
Struktur direktori
mkdir -p /root/ca/{certs,crl,newcerts,private,csr}
chmod 700 /root/ca/private
touch /root/ca/index.txt
echo 1000 > /root/ca/serial
echo 1000 > /root/ca/crlnumber
Fungsinya: index.txt adalah database sertifikat yang diterbitkan, serial adalah nomor seri berikutnya, dan private/ menyimpan kunci CA yang harus dilindungi.
File konfigurasi /root/ca/openssl.cnf
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /root/ca
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/index.txt
serial = $dir/serial
crlnumber = $dir/crlnumber
private_key = $dir/private/ca.key.pem
certificate = $dir/certs/ca.cert.pem
crl = $dir/crl/ca.crl.pem
default_md = sha256
default_days = 397
default_crl_days = 30
policy = policy_loose
unique_subject = no
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 4096
distinguished_name = req_dn
string_mask = utf8only
default_md = sha256
[ req_dn ]
commonName = Common Name
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
Bagian v3_ca penting. CA:true dan keyCertSign menandai sertifikat ini sebagai CA yang boleh menandatangani sertifikat lain.
Membuat private key dan sertifikat Root CA
cd /root/ca
openssl genrsa -aes256 -out private/ca.key.pem 4096
chmod 400 private/ca.key.pem
openssl req -config openssl.cnf \
-key private/ca.key.pem -new -x509 -days 3650 -sha256 \
-extensions v3_ca \
-subj "/C=ID/O=Lab TKJ/CN=Lab TKJ Root CA" \
-out certs/ca.cert.pem
Opsi -aes256 meminta passphrase untuk melindungi kunci. Jangan lupa passphrase ini, karena tanpanya CA tidak bisa menandatangani apa pun. Kalau kunci CA bocor, semua sertifikat yang pernah diterbitkan tidak lagi bisa dipercaya.
Verifikasi
openssl x509 -in certs/ca.cert.pem -noout -subject -issuer -dates
openssl x509 -in certs/ca.cert.pem -noout -text | grep -A1 "Basic Constraints"
Hasil yang diharapkan: subject dan issuer sama (self-signed), dan CA:TRUE.
Langkah 3: Membuat Key dan CSR di Server Layanan
Di sini kita menerapkan prinsip bahwa key dibuat di server pemakai, bukan di CA.
Server 1 (web + webmail)
sudo mkdir -p /etc/ssl/lab
cd /etc/ssl/lab
sudo openssl genrsa -out /etc/ssl/private/web.lab.local.key.pem 2048
sudo chmod 640 /etc/ssl/private/web.lab.local.key.pem
sudo chown root:ssl-cert /etc/ssl/private/web.lab.local.key.pem
sudo openssl req -new -key /etc/ssl/private/web.lab.local.key.pem \
-subj "/C=ID/O=Lab TKJ/CN=web.lab.local" \
-addext "subjectAltName=DNS:web.lab.local,DNS:webmail.lab.local" \
-out web.lab.local.csr.pem
Server 2 (mail)
sudo mkdir -p /etc/ssl/lab
cd /etc/ssl/lab
sudo openssl genrsa -out /etc/ssl/private/mail.lab.local.key.pem 2048
sudo chmod 640 /etc/ssl/private/mail.lab.local.key.pem
sudo chown root:ssl-cert /etc/ssl/private/mail.lab.local.key.pem
sudo openssl req -new -key /etc/ssl/private/mail.lab.local.key.pem \
-subj "/C=ID/O=Lab TKJ/CN=mail.lab.local" \
-addext "subjectAltName=DNS:mail.lab.local" \
-out mail.lab.local.csr.pem
Kirim CSR ke server CA
scp /etc/ssl/lab/web.lab.local.csr.pem user@ca.lab.local:/root/ca/csr/
Peringatan penting tentang SAN: browser dan klien modern mengabaikan Common Name dan hanya memeriksa Subject Alternative Name (SAN). Kalau nama host yang diakses tidak ada di SAN, muncul error hostname mismatch, walaupun CA-nya dipercaya. Ini penyebab paling umum masalah “sertifikat sudah dipasang tapi tetap error”.
Langkah 4: CA Menandatangani CSR
Di server CA, buat file extension per server. Untuk web server (/root/ca/csr/web.ext):
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = DNS:web.lab.local,DNS:webmail.lab.local
Untuk mail server (/root/ca/csr/mail.ext), isinya sama, dengan SAN DNS:mail.lab.local.
Tanda tangani:
cd /root/ca
openssl ca -config openssl.cnf -extfile csr/web.ext \
-days 397 -notext -md sha256 \
-in csr/web.lab.local.csr.pem -out certs/web.lab.local.cert.pem
openssl ca -config openssl.cnf -extfile csr/mail.ext \
-days 397 -notext -md sha256 \
-in csr/mail.lab.local.csr.pem -out certs/mail.lab.local.cert.pem
Kita sengaja memakai -extfile dengan SAN yang kita tulis sendiri. Cara ini lebih aman daripada menyalin ekstensi dari CSR secara otomatis, karena pemohon tidak bisa menyisipkan ekstensi berbahaya (misalnya CA:true). Ini contoh prinsip least privilege di sisi CA.
Verifikasi:
openssl verify -CAfile certs/ca.cert.pem certs/web.lab.local.cert.pem
openssl x509 -in certs/web.lab.local.cert.pem -noout -text | grep -A1 "Alternative Name"
cat index.txt
Hasil yang diharapkan: OK, dan SAN sesuai rencana.
Kirim balik sertifikat server dan ca.cert.pem ke masing-masing server:
scp certs/web.lab.local.cert.pem certs/ca.cert.pem user@web.lab.local:/tmp/
scp certs/mail.lab.local.cert.pem certs/ca.cert.pem user@mail.lab.local:/tmp/
Langkah 5: Trust Distribution di Debian
Agar klien Debian (termasuk server yang saling terhubung) memercayai CA kita:
sudo cp /tmp/ca.cert.pem /usr/local/share/ca-certificates/lab-tkj-root-ca.crt
sudo update-ca-certificates
File harus berekstensi .crt dan berformat PEM. Hasilnya muncul sebagai 1 added di output. Setelah itu curl, openssl s_client, dan aplikasi yang memakai trust store sistem akan memercayai CA tersebut.
Untuk Windows, impor ca.cert.pem (ubah ekstensi jadi .crt) ke Trusted Root Certification Authorities. Untuk perangkat banyak, distribusikan lewat Group Policy.
Langkah 6: HTTPS dengan Nginx (Server 1)
sudo apt install -y nginx
sudo cp /tmp/web.lab.local.cert.pem /etc/ssl/lab/web.lab.local.cert.pem
Konfigurasi /etc/nginx/sites-available/web.lab.local:
server {
listen 80;
server_name web.lab.local webmail.lab.local;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name web.lab.local;
ssl_certificate /etc/ssl/lab/web.lab.local.cert.pem;
ssl_certificate_key /etc/ssl/private/web.lab.local.key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
root /var/www/html;
index index.html;
}
Aktifkan dan uji:
sudo ln -s /etc/nginx/sites-available/web.lab.local /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
curl -v https://web.lab.local 2>&1 | grep -E "subject|issuer|SSL certificate verify"
openssl s_client -connect web.lab.local:443 -servername web.lab.local </dev/null 2>/dev/null | grep -E "Verify return code"
Hasil yang diharapkan: Verify return code: 0 (ok). Jika berisi unable to get local issuer certificate, berarti trust distribution di klien belum beres.
Langkah 7: Webmail (Roundcube) di Atas HTTPS
Webmail memiliki dua koneksi yang perlu diamankan:
- Browser ke Roundcube lewat HTTPS (Nginx, sama seperti di atas).
- Roundcube ke IMAP/SMTP mail server (backend).
Banyak orang hanya mengamankan yang pertama. Padahal kalau backend memakai koneksi polos, password tetap lewat jaringan tanpa enkripsi. Di config.inc.php Roundcube:
$config['imap_host'] = 'ssl://mail.lab.local:993';
$config['smtp_host'] = 'tls://mail.lab.local:587';
$config['imap_conn_options'] = [
'ssl' => [
'verify_peer' => true,
'verify_peer_name' => true,
'cafile' => '/etc/ssl/certs/ca-certificates.crt',
],
];
$config['smtp_conn_options'] = $config['imap_conn_options'];
Pakai nama host yang ada di SAN (mail.lab.local), jangan localhost atau IP. Kalau tidak, verifikasi nama gagal. Jangan “menyelesaikan” masalah dengan mematikan verify_peer, karena itu menghilangkan fungsi autentikasi TLS.
Langkah 8: Mail Server (Postfix + Dovecot) di Server 2
sudo apt install -y postfix dovecot-imapd
sudo cp /tmp/mail.lab.local.cert.pem /etc/ssl/lab/mail.lab.local.cert.pem
Postfix
sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/lab/mail.lab.local.cert.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/mail.lab.local.key.pem'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtpd_tls_auth_only = yes'
sudo postconf -e 'smtpd_tls_protocols = >=TLSv1.2'
sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
sudo systemctl reload postfix
Opsi smtpd_tls_auth_only = yes memastikan login hanya diterima setelah koneksi dienkripsi. Untuk port submission 587, aktifkan juga entry submission di master.cf dengan smtpd_tls_security_level=encrypt.
Dovecot
Pengaturan sertifikat Dovecot berubah antara versi 2.3 dan 2.4, jadi cek versi dulu:
dovecot --version
Untuk Dovecot 2.3 (/etc/dovecot/conf.d/10-ssl.conf):
ssl = required
ssl_cert = </etc/ssl/lab/mail.lab.local.cert.pem
ssl_key = </etc/ssl/private/mail.lab.local.key.pem
ssl_min_protocol = TLSv1.2
Untuk Dovecot 2.4, nama parameternya berbeda (ssl_server_cert_file, ssl_server_key_file). Cek dokumentasi resmi versi yang terpasang sebelum menyalin. Setelah itu:
sudo doveconf -n | grep -i ssl
sudo systemctl restart dovecot
Verifikasi mail TLS
openssl s_client -connect mail.lab.local:993 -CAfile /tmp/ca.cert.pem </dev/null | grep "Verify return code"
openssl s_client -starttls smtp -connect mail.lab.local:587 -CAfile /tmp/ca.cert.pem </dev/null | grep "Verify return code"
Keduanya harus menghasilkan 0 (ok).
Langkah 9: Sertifikat untuk Active Directory (LDAPS)
Active Directory memakai LDAP, dan tanpa TLS bind password bisa terlihat di jaringan. LDAPS (port 636) mengamankannya. Persyaratan sertifikat untuk domain controller:
- SAN berisi FQDN DC (mis.
dc1.lab.local). - Extended Key Usage mencakup Server Authentication.
- Private key tersedia di DC.
- Klien memercayai CA penerbitnya.
Samba AD DC di Linux (smb.conf, bagian [global]):
tls enabled = yes
tls keyfile = /etc/samba/tls/dc1.key.pem
tls certfile = /etc/samba/tls/dc1.cert.pem
tls cafile = /etc/samba/tls/ca.cert.pem
Uji dari klien:
openssl s_client -connect dc1.lab.local:636 -CAfile /tmp/ca.cert.pem </dev/null | grep "Verify return code"
ldapsearch -H ldaps://dc1.lab.local -x -b "dc=lab,dc=local" -s base
Windows Server AD DC: sertifikat harus masuk ke store NTDS\Personal atau Local Computer\Personal beserta private key-nya, biasanya lewat file PKCS#12. Di environment Windows, AD CS biasanya lebih praktis dan bisa auto-enrollment. OpenSSL cocok untuk memahami konsepnya.
Studi Kasus Sederhana: “Webmail Sekolah Tidak Bisa Login”
Gejala: guru membuka https://webmail.lab.local dengan lancar, tetapi login selalu gagal dengan “Connection to storage server failed”.
Hipotesis dan pengujian:
- Apakah Dovecot hidup?
systemctl status dovecothasilnya aktif. - Apakah port terbuka?
ss -tlnp | grep 993hasilnya listen. - Apakah TLS diterima dari server webmail?
openssl s_client -connect mail.lab.local:993dari Server 1 menghasilkanunable to get local issuer certificate.
Akar masalah: CA belum dipasang di trust store Server 1, sehingga Roundcube menolak sertifikat mail server.
Solusi: pasang ca.cert.pem di /usr/local/share/ca-certificates/ lalu jalankan update-ca-certificates. Pencegahan: masukkan langkah trust distribution ke checklist provisioning, atau otomasikan dengan Ansible.
Troubleshooting Masalah Umum
| Gejala | Penyebab umum | Cara cek dan solusi |
|---|---|---|
certificate verify failed | CA belum dipercaya klien | update-ca-certificates, cek file .crt |
| Hostname mismatch | Nama tidak ada di SAN | openssl x509 -noout -text, terbitkan ulang dengan SAN benar |
| Nginx gagal start (key values mismatch) | Key dan sertifikat tidak berpasangan | Bandingkan hash (lihat di bawah) |
Permission denied baca key | Hak akses salah | chown root:ssl-cert, chmod 640 |
| Sertifikat “belum berlaku” | Jam server salah | timedatectl, aktifkan NTP |
| Sertifikat kedaluwarsa | Tidak ada monitoring masa berlaku | Cek berkala (lihat di bawah) |
Memastikan key dan sertifikat berpasangan:
openssl x509 -noout -pubkey -in web.lab.local.cert.pem | openssl sha256
openssl pkey -pubout -in /etc/ssl/private/web.lab.local.key.pem | openssl sha256
Kedua hash harus identik.
Memeriksa masa berlaku:
openssl x509 -in web.lab.local.cert.pem -noout -enddate
openssl x509 -in web.lab.local.cert.pem -noout -checkend 2592000 && echo "Aman > 30 hari" || echo "Segera perpanjang"
Mencabut Sertifikat (Revocation)
Jika key server bocor atau server dihapus, sertifikat harus dicabut:
cd /root/ca
openssl ca -config openssl.cnf -revoke certs/web.lab.local.cert.pem
openssl ca -config openssl.cnf -gencrl -out crl/ca.crl.pem
openssl crl -in crl/ca.crl.pem -noout -text
CRL harus dipublikasikan dan layanan harus dikonfigurasi untuk memeriksanya. Tanpa itu, pencabutan hanya tercatat di CA tanpa efek nyata.
Best Practice dan Tips Profesional
- Lindungi key CA. Di production, simpan root CA offline (VM yang dimatikan, atau HSM) dan gunakan Intermediate CA untuk operasional harian.
- Gunakan masa berlaku pendek. Sertifikat server 397 hari atau kurang membatasi dampak kebocoran dan membiasakan proses perpanjangan.
- Selalu isi SAN, termasuk semua nama alias yang dipakai pengguna.
- Aktifkan hanya TLS 1.2 dan 1.3.
- Jangan matikan verifikasi sertifikat hanya demi “supaya jalan” (
-kpada curl,verify_peer=false). - Backup key CA dan
index.txtsecara terenkripsi dan simpan di lokasi terpisah. Lakukan restore test. - Otomasikan distribusi trust dan perpanjangan dengan Ansible, apalagi jika servernya banyak.
- Dokumentasikan: siapa pemilik tiap sertifikat, tanggal kedaluwarsa, dan prosedur perpanjangan.

Ringkasan
- TLS memberi enkripsi, integritas, dan autentikasi. CA adalah dasar autentikasinya.
- Alur dasarnya: key di server, CSR ke CA, CA menandatangani, pasang di layanan, distribusikan trust.
- SAN wajib diisi sesuai nama yang diakses klien.
- Webmail perlu pengamanan di dua sisi: browser ke web dan web ke IMAP/SMTP.
- AD butuh sertifikat dengan EKU Server Authentication untuk LDAPS.
- Verifikasi selalu dengan
openssl verifydanopenssl s_client. - Lab boleh sederhana, tetapi production butuh Intermediate CA, revocation, monitoring, dan backup.
Punya pengalaman error sertifikat yang paling menjengkelkan? Tulis di kolom komentar dan mari kita bedah bersama. Kalau artikel ini membantu, bagikan ke rekan sesama admin atau siswa TKJ yang sedang menyiapkan UKK.
FAQ
Pertanyaan: Apa bedanya SSL dan TLS?
Jawaban: TLS adalah penerus SSL. SSL sudah usang dan tidak aman. Istilah “SSL” masih dipakai secara umum, tetapi yang berjalan di server modern adalah TLS 1.2 dan 1.3.
Pertanyaan: Apakah sertifikat dari CA OpenSSL sendiri bisa dipakai untuk website publik?
Jawaban: Tidak. Browser publik tidak memercayai CA pribadi kita. Gunakan CA internal hanya untuk jaringan yang klien-kliennya sudah memasang root CA, dan CA publik (mis. Let’s Encrypt) untuk website publik.
Pertanyaan: Mengapa browser tetap error padahal sertifikat sudah terpasang?
Jawaban: Penyebab umumnya ada dua: root CA belum dipercaya di klien, atau nama domain yang diakses tidak tercantum di SAN. Periksa keduanya dengan openssl s_client dan openssl x509 -text.
Pertanyaan: Haruskah private key dibuat di server CA?
Jawaban: Sebaiknya tidak. Buat key di server pemakai lalu kirim hanya CSR ke CA, supaya private key tidak pernah berpindah lewat jaringan.
Pertanyaan: Apa itu SAN dan mengapa wajib?
Jawaban: SAN (Subject Alternative Name) adalah daftar nama host atau IP yang sah untuk sertifikat. Klien modern memeriksa SAN, bukan Common Name, jadi tanpa SAN yang benar sertifikat akan ditolak.
Pertanyaan: Apakah satu sertifikat bisa dipakai untuk web dan mail server?
Jawaban: Bisa, bila semua nama host ada di SAN. Namun memisahkan sertifikat per server atau layanan lebih aman karena kebocoran satu key tidak berdampak ke layanan lain.
Pertanyaan: Bagaimana cara mengetahui sertifikat akan segera kedaluwarsa?
Jawaban: Gunakan openssl x509 -noout -enddate atau -checkend, lalu jadwalkan lewat cron atau sistem monitoring agar ada peringatan sebelum masa berlaku habis.
Bagaimana pengalaman Bapak/Ibu membangun CA sendiri? Ada langkah yang masih membingungkan atau error yang belum terpecahkan? Tulis di kolom komentar, kita diskusikan bersama.
Jika artikel ini bermanfaat, bagikan ke rekan sysadmin, guru TKJ, atau siswa yang sedang persiapan UKK dan LKS ITNSA. Lanjutkan belajar dengan membaca artikel terkait di walidumar.my.id tentang SSH hardening, Fail2ban, dan administrasi server Debian. Ikuti blog dan kanal YouTube untuk panduan sysadmin dan jaringan berikutnya.
Dukung kami dengan Subscribe & Join Membership channel YouTube | Walid Umar
Akses video pembelajaran eksklusif, materi persiapan UKK (Uji Kompetensi Siswa) dan Penyelesaian Soal LKS ITNSA