Sedang mencari cara untuk memperkuat pertahanan website atau aplikasi dari serangan man-in-the-middle?
Jika ya, GudPeople perlu mengenal SSL Pinning.
Apa Itu SSL Pinning?
SSL Pinning adalah sebuah teknik untuk mencegah serangan Man-in-the-Middle (MITM) dengan cara menanamkan public key dari sertifikat SSL/TLS secara hardcode (langsung dimasukkan ke dalam kode) ke aplikasi atau perangkat.
Jadi, saat aplikasi atau perangkat berkomunikasi dengan server, aplikasi tersebut akan membandingkan public key sertifikat SSL server dengan public key yang sudah ditanamkan (hardcode) di dalam aplikasi atau perangkat tersebut.
Jika keduanya cocok, maka koneksi dianggap aman.
Normalnya, aplikasi akan mempercayai sertifikat yang ditandatangani oleh Certificate Authority (CA) terpercaya.
Namun, CA berisiko dikompromikan, dan hacker bisa membuat sertifikat palsu yang tampak asli.
Nah, SSL Pinning mencegah hal ini dengan membatasi sertifikat yang dipercaya hanya untuk sertifikat yang telah ditentukan.
Manfaat SSL Pinning
1. Meningkatkan Keamanan
SSL Pinning menambahkan lapisan keamanan ekstra terhadap serangan Man-in-the-Middle (MITM).
Serangan MITM terjadi ketika peretas menyisipkan diri di antara komunikasi client dan server untuk mencegat dan memanipulasi pertukaran data.
Nah, bila menggunakan teknik SSL Pinning, aplikasi hanya akan berkomunikasi dengan server yang memiliki sertifikat atau private key yang tepat sehingga mencegah peretas menyisipkan sertifikat palsu.
2. Mencegah Serangan Berbasis Sertifikat
SSL Pinning mencegah serangan yang melibatkan sertifikat palsu atau CA yang dikompromikan.
Meskipun peretas berhasil mendapatkan sertifikat valid untuk domain tertentu, aplikasi yang di-pinning akan menolaknya dan memblokir koneksi palsu tersebut.
3. Meningkatkan Performa Aplikasi
SSL Pinning meningkatkan performa aplikasi karena mengurangi waktu yang dibutuhkan untuk validasi sertifikat.
Aplikasi tidak perlu lagi memvalidasi sertifikat server dengan CA terpercaya sehingga menghemat waktu pemrosesan dan mengurangi latensi.
4. Memastikan Kepercayaan
Dengan mewajibkan perangkat klien untuk memverifikasi identitas server melalui sertifikat atau public key terpercaya, SSL Pinning memastikan kepercayaan antara client dan server.
Cara Kerja SSL Pinning
SSL Pinning bekerja dengan cara:

- Client (misalnya, aplikasi seluler atau browser) membuat koneksi SSL/TLS dengan server.
- Server mengirimkan sertifikat dan public key, yang digunakan untuk mengenkripsi data yang dipertukarkan antara client dan server.
- Client memverifikasi identitas server dengan memeriksa sertifikat digital server yang dikeluarkan oleh CA terpercaya.
- Dengan SSL Pinning, client juga memeriksa apakah public key server cocok dengan public key yang telah di-hardcode ke dalam kode atau konfigurasi client.
- Jika public key cocok, koneksi diizinkan untuk dilanjutkan.
- Jika public key server tidak cocok dengan kunci yang disematkan, client menganggap bahwa serangan MITM sedang berlangsung dan menghentikan koneksi.
- Jika client perlu memperbarui public key yang disematkan, aplikasi harus diperbarui dengan kunci yang baru.
Bagaimana Implementasi SSL Pinning?
1. Android
Pada Android, implementasi SSL Pinning dapat dilakukan dengan beberapa cara, yakni:
Network Security Configuration (Android 7.0+)
Buat file XML network_security_config.xml di folder res/xml.
Kemudian, tambahkan konfigurasi domain dan pin sertifikat (dalam bentuk hash).
XML
<?xml version=”1.0″ encoding=”utf-8″?>
<network-security-config>
<domain-config>
<domain includeSubdomains=”true”>your_domain.com</domain>
<pin-set>
<pin digest=”SHA-256″>BASE64_ENCODED_SHA256_PIN</pin>
<pin digest=”SHA-256″>BASE64_ENCODED_SHA256_BACKUP_PIN</pin>
</pin-set>
</domain-config>
</network-security-config>
Ini referensi file konfigurasi di AndroidManifest.xml.
XML
<application
android:networkSecurityConfig=”@xml/network_security_config”
…>
</application>
OkHttp dengan CertificatePinner Menggunakan Library OkHttp
Peroleh pin sertifikat (SHA-256 hash dari public key sertifikat).
Anda bisa mendapatkannya melalui browser atau command line:
openssl s_client -servername your_domain.com -port 443 < /dev/null | openssl x509 -outform PEM | openssl dgst -sha256 -binary | openssl enc -base64.
Setelah itu, implementasikan CertificatePinner di kode OkHttp Anda.
Java
import okhttp3.CertificatePinner;
import okhttp3.OkHttpClient;
// …
CertificatePinner certificatePinner = new CertificatePinner.Builder()
.add(“your_domain.com”, “sha256/BASE64_ENCODED_SHA256_PIN”)
.build();
OkHttpClient client = new OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build();
2. iOS
Implementasi SSL Pinning di iOS umumnya dilakukan dengan cara yang mirip dengan Android, yaitu dengan custom implementasi di kode aplikasi.
Salah satu caranya menggunakan URLSessionDelegate.
Implementasikan method URLSessionDelegate seperti urlSession(_:didReceive challenge:completionHandler:).
Lakukan validasi pin sertifikat di dalam method ini:
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
if let trust = challenge.protectionSpace.serverTrust {
let pinnedCertificates = // Array of pinned certificates
if SecTrustEvaluateWithError(trust, &error) {
// Validasi pin sertifikat terhadap pinnedCertificates
} else {
// Handle validasi gagal
}
}
}
3. Web (Browser)
SSL Pinning pada web browser umumnya kurang relevan untuk aplikasi web biasa karena browser sudah memiliki mekanisme validasi sertifikat bawaan.
Namun, untuk aplikasi web progresif (PWA) atau aplikasi desktop berbasis web, misalnya Electron, Anda bisa mempertimbangkan implementasi custom.
Kesimpulan
SSL Pinning adalah teknik keamanan yang penting untuk mencegah serangan Man-in-the-Middle dengan cara “menanamkan” public key sertifikat SSL langsung ke dalam aplikasi.
Jadi, hanya sertifikat yang sesuai yang dipercaya.
Teknik ini meningkatkan keamanan dengan membatasi sertifikat yang valid, mencegah serangan berbasis sertifikat palsu, meningkatkan performa aplikasi dengan mengurangi waktu validasi sertifikat, dan memastikan kepercayaan antara client dan server.
Implementasinya berbeda-beda tergantung pada platform, seperti menggunakan Network Security Configuration atau OkHttp di Android, URLSessionDelegate di iOS, dan pertimbangan khusus untuk aplikasi web progresif atau desktop.
Nah, setelah memahami pentingnya SSL Pinning, langkah selanjutnya adalah memastikan Anda menggunakan sertifikat SSL yang terpercaya.
Jangan asal memilih dan membeli sertifikat SSL, ya.
Salah-salah, bukannya meningkatkan keamanan website, malah mendatangkan masalah baru.
Sebab itu, selalu beli sertifikat SSL dari CA atau penyedia SSL terpercaya, seperti GudangSSL!
GudangSSL adalah penyedia sertifikat SSL terbaik dan termurah di Indonesia yang menyediakan sertifikat SSL dari berbagai brand ternama, seperti Sectigo, Globalsign, Entrust, Sectigo, Symantec, dan banyak lagi.
Harga SSL di GudangSSL juga 30% lebih hemat dari CA, lho!
Meski murah, bukan berarti tidak berkualitas, ya! Semua produk SSL di GudangSSL sudah terbukti mampu bekerja di lebih dari 99% browser. Kami juga siap memberikan GARANSI 15 HARI setelah SSL diaktifkan!
Punya pertanyaan? Tak usah sungkan, tim customer support GudangSSL siap menjawab pertanyaan para GudPeople!
Jadikan website #MakinAman dengan sertifikat SSL dari GudangSSL!