Lewati ke konten utama
menjadi.dev
Chapter 48.5 Mobile Lanjutan

Certificate Pinning & Network Security

Lindungi komunikasi app dengan server dari MITM attack

Tujuan Pembelajaran

  • Memahami apa itu Man-in-the-Middle attack di mobile
  • Mampu mengimplementasikan SSL certificate pinning
  • Mengerti network security best practices untuk mobile

Analogi

Diagram

      TLS Tanpa Pinning = Kirim Surat Lewat Kurir:
Kurir bisa bocorin isi surat (kalau punya sertifikat palsu).

Certificate Pinning = Kirim Surat dengan Kurir Khusus:
Kurir punya ID card spesifik. Kamu cuma percaya kurir dengan ID itu. Kalau ID beda → surat ditolak.

MITM tanpa pinning: attacker bisa decrypt traffic dengan fake certificate
MITM dengan pinning: attacker tidak bisa karena certificate tidak match
    

Certificate pinning seperti verifikasi ID kurir — kamu cuma percaya server dengan sertifikat spesifik. Sertifikat palsu → koneksi ditolak.

Penjelasan Konsep

HTTPS melindungi data dalam perjalanan dengan enkripsi TLS. Tapi kalau attacker bisa menginstal certificate authority (CA) palsu di device (misal: corporate proxy, compromised device), mereka bisa decrypt traffic.

Certificate pinning: app hanya menerima sertifikat spesifik dari server (pin). Bahkan kalau ada trusted CA lain, koneksi akan ditolak kalau sertifikat tidak match yang di-pin.

Implementasi: (1) expo-network — basic network info. (2) Untuk pinning di Expo, gunakan library react-native-ssl-pinning atau konfigurasi di app.json. (3) Atau implementasi manual dengan custom fetch yang verifikasi certificate hash.

Pinning strategies: (1) Pin certificate — pin satu sertifikat spesifik. Masalah: sertifikat expire → harus update app. (2) Pin public key — pin public key yang lebih stabil (bisa di-share antar sertifikat). Lebih fleksibel. (3) Pin CA — pin certificate authority. Paling reliable, paling simple.

Network security config (Android): android/app/src/main/res/xml/network_security_config.xml — deklarasi domain + pin hash. iOS: Info.plist dengan NSAppTransportSecurity.

Best practices: (1) Selalu pakai HTTPS. (2) Jangan hardcode API keys di source code — gunakan env vars. (3) Certificate transparency check. (4) Regular dependency audit (npm audit, dependabot). (5) ProGuard/R8 untuk obfuscate kode Android.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami apa itu Man-in-the-Middle attack di mobile., mampu mengimplementasikan SSL certificate pinning., dan mengerti network security best practices untuk mobile. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Certificate Pinning & Network Security, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Certificate pinning seperti verifikasi ID kurir — kamu cuma percaya server dengan sertifikat spesifik. Sertifikat palsu → koneksi ditolak. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. sslPinning config dengan hash sertifikat. Axios adapter diganti dengan pinned fetch. Semua request melalui pinning check.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

tsx
import axios from "axios";
import { fetch as pinnedFetch } from "react-native-ssl-pinning";

const api = axios.create({ baseURL: "https://api.myapp.com" });

api.defaults.adapter = async (config) => {
  const response = await pinnedFetch(config.url!, {
    method: config.method?.toUpperCase(),
    body: config.data,
    headers: config.headers,
    sslPinning: { certs: ["sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="] },
  });
  return { data: JSON.parse(response.bodyString), status: response.status, statusText: "", headers: response.headers, config };
};

Penjelasan Kode

sslPinning config dengan hash sertifikat. Axios adapter diganti dengan pinned fetch. Semua request melalui pinning check.

Prompt AI

Jelaskan langkah-langkah melakukan penetration testing sederhana pada aplikasi mobile sendiri: setup Burp Suite/MITMproxy, intercept traffic, verifikasi SSL pinning berfungsi. Tulis dalam bahasa Indonesia.

Pertanyaan Reflektif

Apakah kamu pernah menggunakan aplikasi di WiFi publik? Apakah kamu percaya data kamu aman? Apa yang bisa dilakukan developer untuk melindungi user?