{"id":1535,"date":"2024-11-08T03:37:45","date_gmt":"2024-11-08T03:37:45","guid":{"rendered":"https:\/\/vsi.co.id\/?p=1535"},"modified":"2024-11-08T03:57:16","modified_gmt":"2024-11-08T03:57:16","slug":"implementasi-ssl-pinning-pada-aplikasi-mobile-android-ios","status":"publish","type":"post","link":"https:\/\/vsi.co.id\/?p=1535","title":{"rendered":"Implementasi SSL Pinning pada Aplikasi Mobile (Android &amp; iOS)"},"content":{"rendered":"\n<p class=\"has-small-font-size\">Ditulis oleh Rahman Hardianto &#8211; Trainer V-Academy<\/p>\n\n\n\n<p>SSL Pinning \/ Certificate Pinning merupakan cara untuk memastikan request dari aplikasi yang diterima server valid tanpa adanya interupsi atau perubahan yang mungkin diakibatkan dari serangan MiTM (Man in The Middle Attack). SSL Pinning akan mengamankan jembatan komunikasi yang terhubung ke server, sehingga jika terdapat request yang diterima server namun berbeda certificate maka server akan menolaknya.<\/p>\n\n\n\n<p>Kali ini kita akan coba menambahkan SSL Pinning pada Aplikasi Mobile (Android &amp; iOS) menggunakan Certificate Pinner. Kita akan menggunakan domain yang telah dilengkapi ssl dari <strong>api.github.com<\/strong> sebagai percobaan.<\/p>\n\n\n\n<p>Langkah pertama, kita perlu mendapatkan Public Key\/Hash dari <strong>.cer\/.crt<\/strong> file<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Download certificate server<\/li>\n\n\n\n<li>Selanjutnya, kita eksekusi perintah di bawah ini hilangkan tanda petik dua<br>openssl x509 -in \u201cyour_cerficate.cer\u201d -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64<\/li>\n\n\n\n<li>Setelah itu akan muncul key hasil dari file <strong>.cer<\/strong> yang kita generate, contoh \u201clmo8\/KPXoMsxI+J9hY+ibNm2r0IYChmOsF9BxD74PVc=\u201d<\/li>\n<\/ol>\n\n\n\n<p>Setelah kita dapatkan key, kita coba tambahkan pada aplikasi Android dan iOS kita. Untuk Android kita menggunakan <strong>OkHttpClient<\/strong> dan iOS akan menggunakan <strong>URLSession<\/strong>.<\/p>\n\n\n\n<p class=\"has-large-font-size\">Bagian I &#8211; Android<\/p>\n\n\n\n<p>Buat object CertificatePinner dengan key yang telah didapatkan sebelumnya<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"451\" height=\"50\" src=\"https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image.png\" alt=\"\" class=\"wp-image-1537\" style=\"width:1041px;height:auto\" srcset=\"https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image.png 451w, https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-300x33.png 300w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<p>Definisikan CertificatePinner pada http client yang akan kita gunakan seperti di bawah ini<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"451\" height=\"109\" src=\"https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-1.png\" alt=\"\" class=\"wp-image-1538\" style=\"width:1041px;height:auto\" srcset=\"https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-1.png 451w, https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-1-300x73.png 300w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><\/figure>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<p class=\"has-large-font-size\">Bagian II &#8211; iOS<\/p>\n\n\n\n<p>Kita coba buat Object Helper untuk request ke API dengan mendefinisikan key yang telah kita dapatkan sebelumnya<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img fetchpriority=\"high\" decoding=\"async\" width=\"438\" height=\"316\" src=\"https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-2.png\" alt=\"\" class=\"wp-image-1539\" style=\"width:1042px;height:auto\" srcset=\"https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-2.png 438w, https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-2-300x216.png 300w\" sizes=\"(max-width: 438px) 100vw, 438px\" \/><\/figure>\n\n\n\n<p>Tambah extends <strong>URLSessionDelegate<\/strong> pada class helper yang telah kita buat dan definisikan method <strong>urlSession<\/strong> seperti di bawah<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"322\" src=\"https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-3.png\" alt=\"\" class=\"wp-image-1540\" style=\"width:1041px;height:auto\" srcset=\"https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-3.png 451w, https:\/\/vsi.co.id\/wp-content\/uploads\/2024\/11\/image-3-300x214.png 300w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Ditulis oleh Rahman Hardianto &#8211; Trainer V-Academy SSL Pinning \/ Certificate Pinning merupakan cara untuk memastikan request dari aplikasi yang diterima server valid tanpa adanya interupsi atau perubahan yang mungkin diakibatkan dari serangan MiTM (Man in The Middle Attack). SSL Pinning akan mengamankan jembatan komunikasi yang terhubung ke server, sehingga jika terdapat request yang diterima &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/vsi.co.id\/?p=1535\"> <span class=\"screen-reader-text\">Implementasi SSL Pinning pada Aplikasi Mobile (Android &amp; iOS)<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":1543,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"categories":[13],"tags":[],"class_list":["post-1535","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-berita"],"acf":[],"_links":{"self":[{"href":"https:\/\/vsi.co.id\/index.php?rest_route=\/wp\/v2\/posts\/1535","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vsi.co.id\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vsi.co.id\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vsi.co.id\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vsi.co.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1535"}],"version-history":[{"count":4,"href":"https:\/\/vsi.co.id\/index.php?rest_route=\/wp\/v2\/posts\/1535\/revisions"}],"predecessor-version":[{"id":1553,"href":"https:\/\/vsi.co.id\/index.php?rest_route=\/wp\/v2\/posts\/1535\/revisions\/1553"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vsi.co.id\/index.php?rest_route=\/wp\/v2\/media\/1543"}],"wp:attachment":[{"href":"https:\/\/vsi.co.id\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vsi.co.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vsi.co.id\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}