Lewati ke konten
RazinSaid

Code Signing Aplikasi Electron untuk Windows & macOS

RS
Razin Said
6 menit baca
Bagian 9 dari 12 · Seri Belajar Electron dari Nol sampai Mahir

Jadi kamu udah berhasil bikin installer aplikasi Electron. Mantap. Tapi coba deh sebar ke orang lain — kemungkinan besar mereka bakal dapat peringatan menakutkan pas mau install, atau malah langsung keblokir. Biang keroknya biasanya satu: aplikasimu belum di-code signing.

Singkatnya, code signing itu proses nandatanganin aplikasimu secara digital, biar sistem operasi tahu siapa yang bikin dan yakin filenya nggak dioprek orang lain di tengah jalan. Tanpa tanda tangan ini, aplikasi Electron buatanmu bakal dianggap mencurigakan. Ini kelanjutan dari bahasan package & distribusi aplikasi Electron — soalnya begitu aplikasimu udah jadi installer, langkah selanjutnya adalah bikin dia dipercaya.

Kenapa aplikasi perlu ditandatangani (SmartScreen & Gatekeeper)

Coba bayangin kamu baru download program dari internet. Gimana caranya komputer tahu program itu aman? Ya lewat tanda tangan digital tadi. Anggap aja kayak segel pabrik di kemasan produk — kalau segelnya masih utuh dan dikeluarkan pihak yang tepercaya, sistem operasi jadi tenang.

Di Windows, ada fitur namanya SmartScreen. Pas ada yang menjalankan installer yang belum ditandatangani, SmartScreen langsung nongol dengan layar biru bertuliskan "Windows protected your PC". Buat orang awam, ini bikin nyali ciut — banyak yang langsung batal install karena ngira aplikasimu virus.

Di macOS lebih galak lagi. Penjaganya namanya Gatekeeper, dan aturannya jauh lebih ketat. Aplikasi yang nggak ditandatangani dan nggak lewat proses notarization bakal ditolak mentah-mentah. Yang muncul ke pengguna: pesan kalau aplikasi "nggak bisa dibuka karena Apple nggak bisa memastikan aplikasi ini bebas malware".

Makanya code signing itu bukan formalitas doang. Ini soal kepercayaan. Tanpa tanda tangan, calon pengguna udah nutup pintu duluan bahkan sebelum sempat nyoba karyamu.

Code signing di Windows (sertifikat OV/EV, token/cloud signing, konfig electron-builder)

Buat nandatanganin aplikasi Windows, kamu butuh yang namanya sertifikat code signing. Sertifikat ini kamu beli dari Certificate Authority (CA) tepercaya — misalnya DigiCert, Sectigo, atau penyedia lain.

Ada dua jenis yang umum:

  • OV (Organization Validation): lebih murah, tapi reputasi di SmartScreen dibangun pelan-pelan seiring makin banyak yang download.
  • EV (Extended Validation): lebih mahal dan verifikasinya lebih ketat, tapi langsung dapat reputasi bagus di SmartScreen sejak rilis pertama.

Satu hal yang perlu kamu tahu: trennya berubah beberapa tahun terakhir. Dulu sertifikat itu berupa file .pfx yang bisa kamu simpan di disk. Sekarang, demi keamanan, banyak CA mewajibkan private key disimpan di token hardware (USB) atau di HSM (Hardware Security Module). Ada juga opsi cloud signing kayak Azure Trusted Signing yang nyimpen kunci di layanan terkelola, jadi kamu nggak perlu ribet ngurus token fisik.

Buat konfigurasinya, kita pakai electron-builder. Pengaturan signing Windows ada di blok win, di dalam file konfigurasi (package.json atau electron-builder.yml). Contoh paling sederhana pakai file sertifikat:

{
  "build": {
    "win": {
      "target": "nsis",
      "publisherName": "Nama Perusahaan Kamu"
    }
  }
}

Kalau pakai cara klasik lewat file, biasanya kamu nyetel path dan password sertifikat lewat environment variable — bukan ditulis langsung di file. Contohnya CSC_LINK (path ke file sertifikat) sama CSC_KEY_PASSWORD (passwordnya).

export CSC_LINK="/path/ke/sertifikat.pfx"
export CSC_KEY_PASSWORD="sandi-rahasia"

Nah, kalau kamu pakai token hardware, HSM, atau layanan cloud kayak Azure Trusted Signing, ceritanya beda lagi. Biasanya kamu bakal pakai signing tool tersendiri atau konfigurasi khusus. Karena detailnya cepet banget berubah dan beda-beda tergantung penyedianya, mending kamu ikutin dokumentasi electron-builder plus dokumentasi penyedia sertifikatmu buat langkah persisnya.

Code signing & notarization di macOS (Developer ID + notarytool + hardened runtime)

Di macOS, ceritanya agak lebih panjang. Kamu butuh akun Apple Developer berbayar (langganannya tahunan). Dari akun itu, kamu bikin sertifikat namanya Developer ID Application. Sertifikat inilah yang dipakai buat nandatanganin aplikasi yang kamu sebar di luar Mac App Store.

Tapi cuma ditandatangani doang belum cukup. macOS jaman sekarang minta dua hal tambahan:

  1. Hardened runtime: lapisan keamanan ekstra yang ngebatasin perilaku aplikasi. Beberapa fitur — misalnya akses kamera atau mikrofon — butuh izin khusus lewat file entitlements.
  2. Notarization: aplikasimu dikirim ke server Apple buat dipindai otomatis, dicek ada malware atau nggak. Kalau lolos, Apple ngasih semacam stempel. Baru deh Gatekeeper mau buka aplikasi yang udah dinotarisasi.

Buat notarization, Apple nyediain tool namanya notarytool. Kabar baiknya, electron-builder bisa nanganin signing dan notarization sekaligus, otomatis. Kamu tinggal nyiapin kredensialnya lewat environment variable. Ada tiga variabel yang umum dipakai:

  • APPLE_ID — email akun Apple Developer kamu.
  • APPLE_APP_SPECIFIC_PASSWORD — password khusus aplikasi (bukan password utama Apple ID kamu ya; ini dibuat terpisah di halaman akun Apple).
  • APPLE_TEAM_ID — ID tim developer kamu.
export APPLE_ID="email@kamu.com"
export APPLE_APP_SPECIFIC_PASSWORD="sandi-khusus-aplikasi"
export APPLE_TEAM_ID="ID_TIM_KAMU"

Di sisi konfigurasi, kamu tinggal ngaktifin hardened runtime dan nunjuk file entitlements di blok mac:

{
  "build": {
    "mac": {
      "hardenedRuntime": true,
      "entitlements": "build/entitlements.mac.plist",
      "entitlementsInherit": "build/entitlements.mac.plist"
    }
  }
}

Begitu kamu jalanin build dengan environment variable tadi udah diset, electron-builder bakal nandatanganin aplikasinya terus ngirim ke Apple buat notarization. Kalau ada perubahan nama variabel atau alurnya di versi terbaru, selalu cek dokumentasi electron-builder biar konfigurasimu nggak salah.

Atur lewat environment variable (jangan commit secret)

Ada satu aturan yang nggak boleh banget kamu langgar: jangan pernah naruh sertifikat asli, password, atau kredensial Apple langsung di dalam kode atau file konfigurasi yang ke-commit ke Git. Kalau sampai bocor, orang lain bisa nandatanganin malware atas namamu. Akibatnya fatal — mulai dari reputasi hancur sampai sertifikatmu dicabut.

Makanya kita pakai environment variable. Di komputer lokal, kamu bisa nyetelnya langsung di terminal, atau pakai file .env yang wajib masuk ke .gitignore.

# .gitignore
.env
*.pfx
*.p12

Kalau build-nya otomatis di CI/CD (misalnya GitHub Actions), simpan kredensialnya sebagai "secrets" di pengaturan repository, jangan di kode. Pas build jalan, sistem CI bakal nyuntikin nilai itu sebagai environment variable. Dengan cara ini, kunci rahasiamu nggak pernah kelihatan di file mana pun.

Intinya: kode boleh kebuka, rahasia harus ketutup.

Verifikasi hasil signing

Habis build selesai, jangan langsung percaya gitu aja. Cek dulu, tanda tangannya beneran nempel apa nggak.

Di Windows, klik kanan file installer-nya, pilih Properties, terus buka tab Digital Signatures. Kalau tanda tangannya valid, nama penerbitnya bakal muncul di situ. Atau kalau mau lewat PowerShell:

Get-AuthenticodeSignature "dist/AppKamu Setup 1.0.0.exe"

Kalau statusnya Valid, berarti aman.

Di macOS, ada dua perintah yang bisa kamu pakai. Yang pertama buat ngecek tanda tangannya, yang kedua buat ngecek apakah Gatekeeper bakal nerima aplikasimu:

codesign --verify --deep --strict --verbose=2 "dist/mac/AppKamu.app"
spctl --assess --type execute --verbose "dist/mac/AppKamu.app"

Kalau hasilnya accepted dan sumbernya Notarized Developer ID, berarti aplikasimu udah ditandatangani sekaligus dinotarisasi dengan bener.

Tapi cara paling jujur buat nguji apa? Coba install aplikasimu di komputer lain yang masih bersih — idealnya sih punya temen. Kalau nggak ada peringatan menakutkan yang nongol, selamat, kamu berhasil.

Penutup

Intinya, code signing itu jembatan kepercayaan antara karyamu dan penggunanya. Di Windows, kamu butuh sertifikat OV atau EV, dengan tren nyimpen kunci di token hardware atau cloud. Di macOS, kamu butuh Developer ID, hardened runtime, plus notarization ke Apple. Untungnya electron-builder bikin dua-duanya jadi gampang lewat konfigurasi dan environment variable — asalkan rahasiamu tetep aman dan nggak ikut ke-commit.

Sekarang aplikasimu udah tepercaya dan siap disebar. Tapi gimana kalau nanti ada bug yang perlu dibenerin atau fitur baru? Masa iya kamu nyuruh pengguna download ulang tiap kali ada update. Di bab berikutnya kita bakal bahas auto-update dengan electron-updater, biar aplikasimu bisa memperbarui dirinya sendiri secara otomatis. Kalau mau lihat gambaran besar seluruh materinya, kamu bisa balik ke seri Belajar Electron.

Bagikan: XWhatsAppFacebookLinkedIn

Artikel terkait