it-swarm-tr.com

Windows'ta kod imzalama için kendinden imzalı bir sertifika nasıl oluştururum?

Windows SDK'daki araçları kullanarak kod imzalama için kendinden imzalı bir sertifika nasıl oluşturabilirim?

204
Roger Lipscombe

Güncellenmiş Cevap

Aşağıdaki Windows sürümlerini veya daha yenisini kullanıyorsanız: Windows Server 2012, Windows Server 2012 R2 veya Windows 8.1 sonra MakeCert artık kullanımdan kaldırılmıştır ve Microsoft kullanmanızı önerir PowerShell Cmdlet Yeni-SelfSignedCertificate .

Windows 7 gibi daha eski bir sürümü kullanıyorsanız, MakeCert ya da başka bir çözüme bağlı kalmanız gerekir. Bazı insanlar öneriniz the Genel Anahtar Altyapı Powershell (PSPKI) Modülü .

Orijinal cevap

Tek seferde kendinden imzalı bir kod imzalama sertifikası (SPC - Software Publisher Certificate ) oluşturabilirken, aşağıdakileri yapmayı tercih ederim:

Kendinden imzalı bir sertifika yetkilisi (CA) oluşturma

makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
         -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer

(^ = toplu komut satırının satır sarmasına izin ver)

Bu, kendinden imzalı bir (-r) sertifikası oluşturur ve dışa aktarılabilir bir özel anahtar (-pe) oluşturur. Adı "CA'm", ve geçerli kullanıcı için CA deposuna konmalı. SHA-256 algoritmasını kullanıyoruz. Anahtar imzalamak içindir (-sky).

Özel anahtar MyCA.pvk dosyasında ve sertifika MyCA.cer dosyasında saklanmalıdır.

CA sertifikasını içe aktarma

CA sertifikasına güvenmenizin bir anlamı olmadığı için, Windows sertifika deposuna almanız gerekir. Siz Sertifikaları MMC snapin kullanabilirsiniz, ancak komut satırından:

certutil -user -addstore Root MyCA.cer

Kod imzalama sertifikası oluşturma (SPC)

makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
         -sky signature ^
         -ic MyCA.cer -iv MyCA.pvk ^
         -sv MySPC.pvk MySPC.cer

Yukarıdakiyle hemen hemen aynıdır, ancak veren bir anahtar ve sertifika (-ic ve -iv anahtarları) sağlıyoruz.

Ayrıca sertifikayı ve anahtarı bir PFX dosyasına dönüştürmek isteriz:

pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx

PFX dosyasını korumak istiyorsanız, -po anahtarını ekleyin, aksi takdirde PVK2PFX şifresi olmayan bir PFX dosyası oluşturur.

Kod imzalamak için sertifikayı kullanma

signtool sign /v /f MySPC.pfx ^
              /t http://timestamp.url MyExecutable.exe

( Zaman damgalarının neden önemli olabileceğini görün )

PFX dosyasını sertifika deposuna alırsanız (PVKIMPRT veya MMC ek bileşenini kullanabilirsiniz), kodu aşağıdaki gibi imzalayabilirsiniz:

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

signtool /t için bazı olası zaman damgası URL'leri:

  • http://timestamp.verisign.com/scripts/timstamp.dll
  • http://timestamp.globalsign.com/scripts/timstamp.dll
  • http://timestamp.comodoca.com/authenticode

Tam Microsoft belgeleri

İndirilenler

.NET geliştiricisi olmayanlar için, Windows SDK ve .NET çerçevesinin bir kopyasına ihtiyacınız olacaktır. Burada güncel bir bağlantı mevcuttur: SDK & .NET (C:\Program Files\Microsoft SDKs\Windows\v7.1 içine makecert yükler). Kilometreniz değişebilir.

MakeCert, Visual Studio Komut İstemi'nden edinilebilir. Visual Studio 2015'de var ve Windows 7'deki Başlat Menüsünden "VS 2015 için Geliştirici Komut İstemi" veya "VS2015 x64 Yerel Araçlar Komut İstemi" (muhtemelen hepsi aynı klasörde) altında başlatılabilir.

344
Roger Lipscombe

Roger'ın cevabı çok yardımcı oldu.

Yine de, onu kullanırken biraz sorun yaşadım ve “Windows bu sürücü yazılımının yayıncısını doğrulayamıyor” hata iletişim kutusunu reddetti. Anahtar, test kök sertifikasını şuraya kurmaktı.

certutil -addstore Root Demo_CA.cer

hangi Roger'ın cevabı tam olarak örtülü değildi.

İşte benim için çalışan bir toplu iş dosyası (.inf dosyam dahil, dahil değil). Her şeyden GUI aracı olmadan baştan sona nasıl yapıldığını gösterir (birkaç şifre sorma hariç).

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

Cevapta belirtildiği gibi, kendi betiğinizi imzalamak için itiraz edilmemiş bir yol kullanmak için, biri New-SelfSignedCertificate kullanmalıdır.

  1. Anahtarı üret:
    New-SelfSignedCertificate -DnsName [email protected] -Type CodeSigning -CertStoreLocation cert:\CurrentUser\My

  2. Sertifikayı özel anahtar olmadan ver:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt [0], birden fazla sertifikanız olduğu durumlarda bu işi yapar ... Açıkça indeks kullanmak istediğiniz sertifikayla eşleşmesini sağlayın ... ya da filtrelemek için bir yol kullanın (thumprint veya yayıncı).

  3. Güvenilir Yayımcı olarak içe aktar
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. Kök sertifika yetkilisi olarak içe aktarın.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

  5. Senaryoyu imzala.
    Set-AuthenticodeSignature .\script.ps1 -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)

Açıkçası, anahtarı kurduğunuzda, diğer tüm komut dosyalarını da onunla imzalayabilirsiniz.
bu makale 'de daha ayrıntılı bilgi ve sorun giderme yardımı alabilirsiniz.

14
chaami

PowerShell 4.0'dan itibaren (Windows 8.1/ Server 2012 R2), Windows'ta makecert.exe olmadan bir sertifika oluşturmak mümkündür.

İhtiyacınız olan komutlar New-SelfSignedCertificate ve Export-PfxCertificate .

Yönergeler PowerShell ile Kendinden İmzalı Sertifikalar Oluşturma.

12
Yishai

Powershell'de New-SelfSignedCertificate komutunu kullanmak oldukça kolaydır. Powershell'i açın ve bu 3 komutu çalıştırın.

1) Sertifika oluştur :
$ cert = Yeni-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning -CertStoreLocation Cert:\CurrentUser\My

2) bunun için şifreyi ayarlayın :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText

3) Dışa aktarın :
Dışa Aktar-PfxCertificate -Cert "cert:\CurrentUser\My\$ ($ cert.Thumbprint)" -FilePath "d:\selfsigncert.pfx" -Password $ CertPassword

Sertifikanız selfsigncert.pfx bulunacak @ D:/


İsteğe bağlı adım: Sistem ortam değişkenlerine sertifika şifresi de eklemeniz gerekir. bunu cmd cinsinden aşağıya girerek yapın: setx CSC_KEY_PASSWORD "my_password"

12
JerryGoyal