Bagaimana cara membuat sertifikat yang ditandatangani sendiri untuk penandatanganan kode menggunakan alat dari Windows SDK?
security
code-signing
Roger Lipscombe
sumber
sumber
Jawaban:
Jawaban yang Diperbarui
Jika Anda menggunakan versi Windows berikut atau lebih baru: Windows Server 2012, Windows Server 2012 R2, atau Windows 8.1 maka MakeCert sekarang tidak digunakan lagi , dan Microsoft merekomendasikan untuk menggunakan PowerShell Cmdlet New-SelfSignedCertificate .
Jika Anda menggunakan versi yang lebih lama seperti Windows 7, Anda harus tetap menggunakan MakeCert atau solusi lain. Beberapa orang menyarankan para Public Key Infrastructure Powershell (PSPKI) Modul .
Jawaban Asli
Meskipun Anda dapat membuat sertifikat penandatanganan kode yang ditandatangani sendiri (SPC - Sertifikat Penerbit Perangkat Lunak ) dalam sekali jalan, saya lebih suka melakukan yang berikut:
Membuat otoritas sertifikat yang ditandatangani sendiri (CA)
(^ = memungkinkan baris perintah batch untuk membungkus baris)
Ini menciptakan sertifikat yang ditandatangani sendiri (-r), dengan kunci pribadi yang dapat diekspor (-pe). Ini bernama "CA saya", dan harus diletakkan di toko CA untuk pengguna saat ini. Kami menggunakan algoritma SHA-256 . Kuncinya dimaksudkan untuk penandatanganan (-sky).
Kunci pribadi harus disimpan dalam file MyCA.pvk, dan sertifikat dalam file MyCA.cer.
Mengimpor sertifikat CA
Karena tidak ada gunanya memiliki sertifikat CA jika Anda tidak mempercayainya, Anda harus mengimpornya ke toko sertifikat Windows. Anda dapat menggunakan snapin Sertifikat MMC, tetapi dari baris perintah:
Membuat sertifikat penandatanganan kode (SPC)
Ini hampir sama seperti di atas, tetapi kami menyediakan kunci penerbit dan sertifikat (sakelar -ic dan -iv).
Kami juga ingin mengonversi sertifikat dan kunci menjadi file PFX:
Jika Anda ingin melindungi file PFX, tambahkan saklar -po, jika tidak PVK2PFX membuat file PFX tanpa frasa sandi.
Menggunakan sertifikat untuk menandatangani kode
( Lihat mengapa cap waktu mungkin penting )
Jika Anda mengimpor file PFX ke toko sertifikat (Anda dapat menggunakan PVKIMPRT atau snapin MMC), Anda dapat menandatangani kode sebagai berikut:
Beberapa kemungkinan stempel waktu URL
signtool /t
adalah:http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
Dokumentasi Microsoft lengkap
Unduhan
Bagi mereka yang bukan pengembang .NET, Anda akan memerlukan salinan kerangka kerja Windows SDK dan .NET. Tautan saat ini tersedia di sini: SDK & .NET (yang menginstal makecert
C:\Program Files\Microsoft SDKs\Windows\v7.1
). Jarak tempuh Anda mungkin beragam.MakeCert tersedia dari Visual Studio Command Prompt. Visual Studio 2015 memilikinya, dan dapat diluncurkan dari Start Menu di Windows 7 di bawah "Prompt Perintah Pengembang untuk VS 2015" atau "VS2015 x64 Native Tools Command Prompt" (mungkin semuanya ada di folder yang sama).
sumber
E=your@email
. Misalnya:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
agar sertifikat dapat digunakan untuk penandatanganan kode (Saya tahu PowerShell gagal menandatangani skrip jika tidak ada)Seperti yang dinyatakan dalam jawaban, untuk menggunakan cara yang tidak usang untuk menandatangani skrip Anda sendiri, seseorang harus menggunakan New-SelfSignedCertificate .
[0] akan berfungsi untuk kasus-kasus ketika Anda memiliki lebih dari satu sertifikat ... Jelas buat indeks cocok dengan sertifikat yang ingin Anda gunakan ... atau gunakan cara untuk menyaring (dengan thumprint atau penerbit).
Jelas sekali Anda telah mengatur kunci, Anda bisa langsung menandatangani skrip lain dengan itu.
Anda dapat memperoleh informasi lebih rinci dan bantuan pemecahan masalah di artikel ini .
sumber
(get-ChildItem ...)
mengembalikan lebih dari satu sertifikat, jadi saya menaruh "[0]" di ujungnya dan berhasil. Seperti diExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
Jawaban Roger sangat membantu.
Saya mengalami sedikit kesulitan dalam menggunakannya, dan terus mendapatkan dialog kesalahan "Windows tidak dapat memverifikasi penerbit perangkat lunak driver ini". Kuncinya adalah dengan menginstal sertifikat root uji
yang jawaban Roger tidak cukup jelas.
Berikut adalah file batch yang berfungsi untuk saya (dengan file .inf, tidak termasuk). Ini menunjukkan cara melakukan semuanya dari awal hingga selesai, tanpa alat GUI sama sekali (kecuali untuk beberapa kata sandi).
sumber
Ini cukup mudah menggunakan perintah New-SelfSignedCertificate di Powershell. Buka PowerShell dan jalankan 3 perintah ini.
Sertifikat selfsigncert.pfx Anda akan berlokasi @
D:/
Langkah opsional: Anda juga perlu menambahkan kata sandi sertifikat ke variabel lingkungan sistem. lakukan dengan memasukkan di bawah ini dalam cmd:
setx CSC_KEY_PASSWORD "my_password"
sumber
Pada PowerShell 4.0 (Windows 8.1 / Server 2012 R2) dimungkinkan untuk membuat sertifikat di Windows tanpa makecert.exe .
Perintah yang Anda butuhkan adalah New-SelfSignedCertificate dan Export-PfxCertificate .
Instruksi ada di Membuat Sertifikat yang ditandatangani sendiri dengan PowerShell .
sumber