Bagaimana cara membuat sertifikat yang ditandatangani sendiri untuk penandatanganan kode menggunakan alat dari Windows SDK?
Bagaimana cara membuat sertifikat yang ditandatangani sendiri untuk penandatanganan kode menggunakan alat dari Windows SDK?
Jawaban:
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 .
Meskipun Anda dapat membuat sertifikat penandatanganan kode yang ditandatangani sendiri (SPC - Sertifikat Penerbit Perangkat Lunak ) dalam sekali jalan, saya lebih suka melakukan yang berikut:
makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
-a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer
(^ = 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.
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:
certutil -user -addstore Root MyCA.cer
makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
-sky signature ^
-ic MyCA.cer -iv MyCA.pvk ^
-sv MySPC.pvk MySPC.cer
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:
pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx
Jika Anda ingin melindungi file PFX, tambahkan saklar -po, jika tidak PVK2PFX membuat file PFX tanpa frasa sandi.
signtool sign /v /f MySPC.pfx ^
/t http://timestamp.url MyExecutable.exe
( 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:
signtool sign /v /n "Me" /s SPC ^
/t http://timestamp.url MyExecutable.exe
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
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).
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 .
New-SelfSignedCertificate -DnsName email@yourdomain.com -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My
Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
[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).
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher
Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root
Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)
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 .
(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
certutil -addstore Root Demo_CA.cer
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).
REM Demo of signing a printer driver with a self-signed test certificate.
REM Run as administrator (else devcon won't be able to try installing the driver)
REM Use a single 'x' as the password for all certificates for simplicity.
PATH %PATH%;"c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin";"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin";c:\WinDDK\7600.16385.1\bin\selfsign;c:\WinDDK\7600.16385.1\Tools\devcon\amd64
makecert -r -pe -n "CN=Demo_CA" -ss CA -sr CurrentUser ^
-a sha256 -cy authority -sky signature ^
-sv Demo_CA.pvk Demo_CA.cer
makecert -pe -n "CN=Demo_SPC" -a sha256 -cy end ^
-sky signature ^
-ic Demo_CA.cer -iv Demo_CA.pvk ^
-sv Demo_SPC.pvk Demo_SPC.cer
pvk2pfx -pvk Demo_SPC.pvk -spc Demo_SPC.cer ^
-pfx Demo_SPC.pfx ^
-po x
inf2cat /drv:driver /os:XP_X86,Vista_X64,Vista_X86,7_X64,7_X86 /v
signtool sign /d "description" /du "www.yoyodyne.com" ^
/f Demo_SPC.pfx ^
/p x ^
/v driver\demoprinter.cat
certutil -addstore Root Demo_CA.cer
rem Needs administrator. If this command works, the driver is properly signed.
devcon install driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F
rem Now uninstall the test driver and certificate.
devcon remove driver\demoprinter.inf LPTENUM\Yoyodyne_IndustriesDemoPrinter_F84F
certutil -delstore Root Demo_CA
Ini cukup mudah menggunakan perintah New-SelfSignedCertificate di Powershell. Buka PowerShell dan jalankan 3 perintah ini.
1) Buat sertifikat :
$ cert = Baru -SignSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning -CertStoreLocation Cert: \ CurrentUser \ My2) atur kata sandinya :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText3) Ekspor :
Ekspor-PfxCertificate -Cert "cert: \ CurrentUser \ My \ $ ($ cert.Thumbprint)" -FilePath "d: \ selfsigncert.pfx" -Password $ CertPassword
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"
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 .