
Sedang mencari langkah untuk memperkuat pertahanan aplikasi dari serangan man-in-the-middle?
Jika ya, Anda perlu mengenal SSL pinning.
Apa Itu SSL Pinning?
SSL Pinning adalah sebuah teknik untuk mencegah serangan Man-in-the-Middle (MITM) dengan langkah menanamkan kunci publik dari sertifikat SSL/TLS secara hardcode (langsung dimasukkan ke dalam kode) ke dalam aplikasi alias perangkat.
Jadi, saat aplikasi alias perangkat berkomunikasi dengan server, aplikasi tersebut bakal membandingkan public key sertifikat SSL/TLS server dengan public key nan sudah ditanamkan (hardcode) di dalam aplikasi alias perangkat tersebut.
Jika keduanya cocok, maka hubungan dianggap aman.
Normalnya, aplikasi bakal mempercayai sertifikat nan ditandatangani oleh Certificate Authority (CA) terpercaya. Namun, CA berisiko dikompromikan, dan hacker bisa membikin sertifikat tiruan nan tampak asli.
Nah, SSL Pinning mencegah perihal ini dengan membatasi sertifikat nan dipercaya hanya untuk sertifikat nan 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 penyerang menyisipkan diri di antara komunikasi pengguna dan server, mencegat dan memanipulasi info nan dipertukarkan.
Nah, dengan SSL Pinning, aplikasi hanya bakal berkomunikasi dengan server nan mempunyai sertifikat alias private key nan tepat sehingga mencegah penyerang untuk menyisipkan sertifikat palsu.
2. Mencegah Serangan Berbasis Sertifikat
SSL Pinning mencegah serangan nan melibatkan sertifikat tiruan alias CA nan dikompromikan.
Meskipun penyerang sukses mendapatkan sertifikat sah untuk domain tertentu, aplikasi nan di-pinning bakal menolaknya dan memblokir hubungan tiruan tersebut.
3. Meningkatkan Performa
SSL Pinning meningkatkan performa aplikasi lantaran mengurangi waktu nan dibutuhkan untuk pengesahan sertifikat.
Aplikasi tidak perlu lagi memvalidasi sertifikat server dengan CA terpercaya, sehingga menghemat waktu pemrosesan dan mengurangi latensi.
4. Memastikan Kepercayaan
Dengan mewajibkan perangkat pengguna untuk memverifikasi identitas server melalui sertifikat alias public key terpercaya, SSL Pinning memastikan kepercayaan antara pengguna dan server.
Cara Kerja SSL Pinning
SSL Pinning bekerja dengan cara:
- Klien (misalnya, aplikasi seluler) membikin hubungan SSL/TLS dengan server.
- Server mengirimkan sertifikat dan kunci publiknya, nan digunakan untuk mengenkripsi info nan dipertukarkan antara pengguna dan server.
- Klien memverifikasi identitas server dengan memeriksa sertifikat digital server nan dikeluarkan oleh CA nan terpercaya.
- Dengan SSL Pinning, pengguna juga memeriksa apakah kunci publik server cocok dengan kunci publik nan telah di-hardcode ke dalam kode alias konfigurasi klien.
- Jika public key cocok, hubungan diizinkan untuk dilanjutkan.
- Jika public key server tidak cocok dengan kunci nan disematkan, pengguna menganggap bahwa serangan MITM sedang berjalan dan menghentikan koneksi.
- Jika pengguna perlu memperbarui public key yang disematkan, aplikasi kudu diperbarui dengan kunci nan baru.
Bagaimana Implementasi SSL Pinning?
1. Android
Pada Android, penerapan SSL Pinning dapat dilakukan dengan beberapa cara:
Network Security Configuration (Android 7.0+)
Buat file XML network_security_config.xml di berkas res/xml.
Kemudian, tambahkan konfigurasi domain dan pin sertifikat (dalam corak 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 alias 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 langkah nan mirip dengan Android, ialah dengan custom penerapan di kode aplikasi.
Salah satu caranya menggunakan URLSessionDelegate.
Implementasikan method URLSessionDelegate seperti urlSession(_:didReceive challenge:completionHandler:).
Lakukan pengesahan 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 pengesahan gagal
}
}
}
3. Web (Browser)
SSL Pinning pada web browser umumnya kurang relevan untuk aplikasi web biasa lantaran browser sudah mempunyai sistem pengesahan sertifikat bawaan.
Namun, untuk aplikasi web progresif (PWA) alias aplikasi desktop berbasis web (misalnya Electron), Anda bisa mempertimbangkan penerapan custom.
- HTTP Public Key Pinning (HPKP): Header HTTP nan sudah deprecated dan tidak disarankan lagi.
- Service Worker: Mungkin diimplementasikan dengan interceptor di service worker (lebih kompleks dan advanced).
Beli SSL Lebih Hemat di GudangSSL!
Nah, untuk mengimplementasikan SSL spinning, Anda memerlukan penyedia SSL terpercaya, seperti GudangSSL!
GudangSSL adalah penyedia sertifikat SSL terbaik dan termurah nan menyediakan sertifikat SSL dari beragam brand ternama, seperti Sectigo, Globalsign, Entrust, Sectigo, Symantec, dan banyak lagi.
Kami juga menyediakan beragam produk SSL dengan nilai 30% lebih irit daripada CA!
Semua produk SSL di GudangSSL bisa bekerja di lebih dari 99% browser! Bila ada masalah, kami memberikan GARANSI 15 HARI setelah SSL diaktifkan!
Yuk, amankan website Anda sekarang dengan sertifikat SSL dari GudangSSL!
HUBUNGI KAMI SEKARANG!
1 tahun yang lalu
English (US) ·
Indonesian (ID) ·