Cara menandatangani paket aplikasi menggunakan SignTool

Catatan

Untuk menandatangani paket aplikasi Windows, lihat Menandatangani paket aplikasi menggunakan SignTool.

Pelajari cara menggunakan SignTool untuk menandatangani paket aplikasi Windows Anda sehingga dapat disebarkan. SignTool adalah bagian dari Windows Software Development Kit (SDK).

Semua paket aplikasi Windows harus ditandatangani secara digital sebelum dapat disebarkan. Meskipun Microsoft Visual Studio 2012 dan yang lebih baru dapat menandatangani paket aplikasi selama pembuatannya, paket yang Anda buat dengan menggunakan alat paket aplikasi (MakeAppx.exe) dari Windows SDK tidak ditandatangani.

Catatan

Anda hanya dapat menggunakan SignTool untuk menandatangani paket aplikasi Windows Anda di Windows 8 dan yang lebih baru atau Windows Server 2012 dan yang lebih baru. Anda tidak dapat menggunakan SignTool untuk menandatangani paket aplikasi pada sistem operasi tingkat bawah seperti Windows 7 atau Windows Server 2008 R2.

Apa yang perlu Anda ketahui

Teknologi

Prasyarat

  • SignTool, yang merupakan bagian dari Windows SDK

  • Sertifikat penandatanganan kode yang valid, misalnya, file Pertukaran Informasi Pribadi (.pfx) yang dibuat dengan alat MakeCert.exe dan Pvk2Pfx.exe

    Untuk informasi tentang membuat sertifikat penandatanganan kode yang valid, lihat Cara membuat sertifikat penandatanganan paket aplikasi.

  • Aplikasi Windows yang dikemas, misalnya, file .appx yang dibuat dengan menggunakan alat paket aplikasi (MakeAppx.exe)

Pertimbangan tambahan

Sertifikat yang Anda gunakan untuk menandatangani paket aplikasi harus memenuhi kriteria berikut:

  • Nama subjek sertifikat harus cocok dengan atribut Publisher yang terkandung dalam elemen Identitas file AppxManifest.xml yang disimpan dalam paket. Nama penerbit adalah bagian dari identitas aplikasi Windows yang dipaketkan, jadi Anda harus membuat nama subjek sertifikat cocok dengan nama penerbit aplikasi. Ini memungkinkan identitas paket yang ditandatangani untuk diperiksa terhadap tanda tangan digital. Untuk informasi tentang kesalahan penandatanganan yang dapat muncul dari penandatanganan paket aplikasi menggunakan SignTool, lihat bagian Keterangan tentang Cara membuat sertifikat penandatanganan paket aplikasi.

  • Sertifikat harus valid untuk penandatanganan kode. Ini berarti bahwa kedua item ini harus benar:

    • Bidang Extended Key Usage (EKU) sertifikat harus tidak diatur atau berisi nilai EKU untuk penandatanganan kode (1.3.6.1.5.5.7.3.3).
    • Bidang Penggunaan Kunci (KU) sertifikat harus tidak diatur atau berisi bit penggunaan untuk tanda tangan digital (0x80).
  • Sertifikat berisi kunci privat.

  • Sertifikat valid. Ini aktif, belum kedaluwarsa, dan belum dicabut.

Petunjuk

Langkah 1: Tentukan algoritma hash yang akan digunakan

Saat menandatangani paket aplikasi, Anda harus menggunakan algoritma hash yang sama dengan yang Anda gunakan saat membuat paket aplikasi. Jika Anda menggunakan pengaturan default untuk membuat paket aplikasi, algoritma hash yang digunakan adalah SHA256.

Jika Anda menggunakan paket aplikasi dengan algoritma hash tertentu untuk membuat paket aplikasi, gunakan algoritma yang sama untuk menandatangani paket. Untuk menentukan algoritma hash yang digunakan untuk menandatangani paket, Anda dapat mengekstrak konten paket dan memeriksa file AppxBlockMap.xml. Atribut HashMethod dari elemen BlockMap menunjukkan algoritma hash yang digunakan saat membuat paket aplikasi. Misalnya:

<BlockMap xmlns="http://schemas.microsoft.com/appx/2010/blockmap" 
HashMethod="https://www.w3.org/2001/04/xmlenc#sha256">

Elemen BlockMap sebelumnya menunjukkan bahwa algoritma SHA256 digunakan. Tabel ini mencantumkan pemetaan algoritma yang saat ini tersedia:

Nilai HashMethod hashAlgorithm untuk digunakan
https://www.w3.org/2001/04/xmlenc#sha256 SHA256 (default .appx)
https://www.w3.org/2001/04/xmldsig-more#sha384 SHA384
https://www.w3.org/2001/04/xmlenc#sha512 SHA512

Langkah 2: Jalankan SignTool.exe untuk menandatangani paket

Untuk menandatangani paket dengan sertifikat penandatanganan dari file .pfx

  • SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password filepath.appx
    

SignTool default parameter /fd hashAlgorithm ke SHA1 jika tidak ditentukan, dan SHA1 tidak valid untuk menandatangani paket aplikasi. Jadi, Anda harus menentukan parameter ini saat menandatangani paket aplikasi. Untuk menandatangani paket aplikasi yang dibuat dengan hash SHA256 default, Anda menentukan parameter hashAlgorithm /fd sebagai SHA256:

SignTool sign /fd SHA256 /a /f signingCert.pfx /p password filepath.appx

Anda dapat menghilangkan parameter kata sandi /p jika Anda menggunakan file .pfx yang tidak dilindungi kata sandi. Anda juga dapat menggunakan opsi pemilihan sertifikat lain yang didukung oleh SignTool untuk menandatangani paket aplikasi. Untuk informasi selengkapnya tentang opsi ini, lihat SignTool.

Catatan

Anda tidak dapat menggunakan operasi stempel waktu SignTool pada paket aplikasi yang ditandatangani; operasi tidak didukung.

Jika Anda ingin memberi stempel waktu paket aplikasi, Anda harus melakukannya selama operasi tanda tangan. Misalnya:

SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password /tr timestampServerUrl 
filepath.appx

Buat parameter /tr timestampServerUrl sama dengan URL untuk server stempel waktu RFC 3161.

Keterangan

Bagian ini membahas pemecahan masalah kesalahan penandatanganan untuk paket aplikasi.

Pemecahan masalah kesalahan penandatanganan paket aplikasi

Selain kesalahan penandatanganan yang dapat dikembalikan SignTool , SignTool juga dapat mengembalikan kesalahan yang khusus untuk penandatanganan paket aplikasi. Kesalahan ini biasanya muncul sebagai kesalahan internal:

SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B) 

Jika kode kesalahan dimulai dengan 0x8008, seperti 0x80080206 APPX_E_CORRUPT_CONTENT), itu menunjukkan bahwa paket yang ditandatangani tidak valid. Dalam hal ini, sebelum Anda dapat menandatangani paket, Anda harus membangun kembali paket. Untuk daftar lengkap kesalahan 0x8008*, lihat Kode Kesalahan COM (Keamanan dan Penyetelan).

Lebih umum lagi, kesalahannya adalah 0x8007000b (ERROR_BAD_FORMAT). Dalam hal ini, Anda dapat menemukan informasi kesalahan yang lebih spesifik di log peristiwa:

Untuk mencari log peristiwa

  1. Jalankan Eventvwr.msc.
  2. Buka log peristiwa: Pemantau Peristiwa (Lokal) > Log Aplikasi dan Layanan > Microsoft > Windows > AppxPackagingOM > Microsoft-Windows-AppxPackaging/Operational
  3. Cari peristiwa kesalahan terbaru.

Kesalahan internal biasanya sesuai dengan salah satu dari ini:

ID Peristiwa Contoh string peristiwa Saran
150 error 0x8007000B: Nama penerbit manifes aplikasi (CN=Contoso) harus cocok dengan nama subjek sertifikat penandatanganan (CN=Contoso, C=US). Nama penerbit manifes aplikasi harus sama persis dengan nama subjek penandatanganan. Catatan: Nama-nama ini ditentukan dalam tanda kutip dan peka huruf besar/kecil dan spasi kosong.
Anda dapat memperbarui string atribut Publisher yang ditentukan untuk elemen Identitas dalam file AppxManifest.xml agar sesuai dengan nama subjek sertifikat penandatanganan yang dimaksudkan. Atau, pilih sertifikat penandatanganan yang berbeda dengan nama subjek yang cocok dengan nama penerbit manifes aplikasi. Nama penerbit manifes dan nama subjek sertifikat keduanya tercantum dalam pesan peristiwa.
151 kesalahan 0x8007000B: Metode hash tanda tangan yang ditentukan (SHA512) harus cocok dengan metode hash yang digunakan dalam peta blok paket aplikasi (SHA256). HashAlgorithm yang ditentukan dalam parameter /fd salah (lihat Langkah 1: Tentukan algoritma hash yang akan digunakan). Jalankan ulang SignTool dengan hashAlgorithm yang cocok dengan peta blok paket aplikasi.
152 kesalahan 0x8007000B: Konten paket aplikasi harus memvalidasi terhadap peta bloknya. Paket aplikasi rusak dan perlu dibangun kembali untuk menghasilkan peta blok baru. Untuk informasi selengkapnya tentang membuat paket aplikasi, lihat membuat paket aplikasi dengan paket aplikasi atau Membuat paket aplikasi dengan Visual Studio 2012.

Pertimbangan Keamanan

Setelah paket ditandatangani, sertifikat yang Anda gunakan untuk menandatangani paket masih harus dipercaya oleh komputer tempat paket akan disebarkan. Dengan menambahkan sertifikat ke penyimpanan sertifikat komputer lokal, Anda memengaruhi kepercayaan sertifikat semua pengguna di komputer. Kami menyarankan agar Anda menginstal sertifikat penandatanganan kode apa pun yang Anda inginkan untuk menguji paket aplikasi ke penyimpanan sertifikat Orang Tepercaya, dan segera menghapus sertifikat tersebut saat tidak lagi diperlukan. Jika Anda membuat sertifikat pengujian Anda sendiri untuk menandatangani paket aplikasi, kami juga menyarankan agar Anda membatasi hak istimewa yang terkait dengan sertifikat pengujian. Untuk informasi selengkapnya tentang membuat sertifikat pengujian untuk menandatangani paket aplikasi, lihat Cara membuat sertifikat penandatanganan paket aplikasi.

Sampel

Membuat sampel paket aplikasi

Konsep

Praktik Terbaik Penandatanganan Kode

Menandatangani paket di Visual Studio 2012

SignTool

Paket aplikasi (MakeAppx.exe)

Cara membuat sertifikat penandatanganan paket aplikasi