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 kit pengembangan perangkat lunak (SDK) Windows.
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 SDK Windows 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
- Pengantar Penandatanganan Kode
- Paket dan penyebaran aplikasi
- Alat untuk Menandatangani File dan Memeriksa Tanda Tangan
Prasyarat
SignTool, yang merupakan bagian dari SDK Windows
Sertifikat penandatanganan kode yang valid, misalnya, file Personal Information Exchange (.pfx) yang dibuat dengan alatMakeCert.exe dan Pvk2Pfx.exe
Untuk informasi tentang membuat sertifikat penandatanganan kode yang valid, lihat Cara membuat sertifikat penandatanganan paket aplikasi.
Aplikasi Windows yang dipaketkan, 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 dari 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.
Instruksi
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 packager 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. Contohnya:
<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 hashAlgorithm /fd 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. Contohnya:
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 Penyiapan).
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
- Jalankan Eventvwr.msc.
- Buka log peristiwa: Log Aplikasi dan Layanan > Pemantau Peristiwa (Lokal) > Microsoft > Windows > AppxPackagingOM > Microsoft-Windows-AppxPackaging/Operational
- 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] 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 harus tetap 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.