it-swarm-id.com

Bagaimana cara membuat sertifikat yang ditandatangani sendiri untuk penandatanganan kode pada Windows?

Bagaimana cara membuat sertifikat yang ditandatangani sendiri untuk penandatanganan kode menggunakan alat dari Windows SDK?

204
Roger Lipscombe

Jawaban yang Diperbarui

Jika Anda menggunakan versi Windows berikut atau lebih baru: Windows Server 2012, Windows Server 2012 R2, atau Windows 8.1 lalu 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 Modul Infrastruktur Kunci Publik Powershell (PSPKI) .

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)

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.

Mengimpor sertifikat CA

Karena tidak ada gunanya memiliki sertifikat CA jika Anda tidak mempercayainya, Anda harus mengimpornya ke toko sertifikat Windows. Anda dapat menggunakan Sertifikat MMC snapin, tetapi dari baris perintah:

certutil -user -addstore Root MyCA.cer

Membuat sertifikat penandatanganan kode (SPC)

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 sakelar -po, jika tidak PVK2PFX membuat file PFX tanpa frasa sandi.

Menggunakan sertifikat untuk menandatangani kode

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 MMC snapin), Anda dapat menandatangani kode sebagai berikut:

signtool sign /v /n "Me" /s SPC ^
              /t http://timestamp.url MyExecutable.exe

Beberapa kemungkinan stempel waktu URL untuk 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 memerlukan salinan kerangka kerja Windows SDK dan .NET. Tautan saat ini tersedia di sini: SDK & .NET (yang memasang makecert di 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).

344
Roger Lipscombe

Jawaban Roger sangat membantu.

Namun 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 saya, 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
19
Dan Kegel

Seperti yang dinyatakan dalam jawaban, untuk menggunakan cara yang tidak usang untuk menandatangani skrip Anda sendiri, seseorang harus menggunakan New-SelfSignedCertificate .

  1. Hasilkan kunci:
    New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. Ekspor sertifikat tanpa kunci pribadi:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt The [0] akan membuat ini berfungsi untuk kasus-kasus ketika Anda memiliki lebih dari satu sertifikat ... Jelas membuat indeks cocok dengan sertifikat yang ingin Anda gunakan ... atau menggunakan cara untuk menyaring (dengan thumprint atau penerbit).

  3. Impor sebagai Penerbit Tepercaya
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. Impor sebagai otoritas sertifikat Root.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. Tanda tangani skrip.
    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 bisa mendapatkan informasi lebih rinci dan beberapa bantuan pemecahan masalah di artikel ini .

14
chaami

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.

12
Yishai

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\My

2) atur kata sandi untuknya :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText

3) Ekspor :
Ekspor-PfxCertificate -Cert "cert:\CurrentUser\My\$ ($ cert.Thumbprint)" -FilePath "d:\selfsigncert.pfx" -Password $ CertPassword

Sertifikat Anda selfsigncert.pfx 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"

12
JerryGoyal