Windows SDK'nın araçlarını kullanarak kod imzalama için kendinden imzalı bir sertifika nasıl oluştururum?
Windows SDK'nın araçlarını kullanarak kod imzalama için kendinden imzalı bir sertifika nasıl oluştururum?
Yanıtlar:
Aşağıdaki Windows sürümlerini veya daha yenisini kullanıyorsanız : Windows Server 2012, Windows Server 2012 R2 veya Windows 8.1, MakeCert artık kullanımdan kaldırılmıştır ve Microsoft , PowerShell Cmdlet Yeni-SelfSignedCertificate kullanılmasını önerir .
Windows 7 gibi daha eski bir sürüm kullanıyorsanız, MakeCert veya başka bir çözümle devam etmeniz gerekir. Bazı insanlar önermek Açık Anahtar Altyapısı Powershell (PSPKI) Modülü .
Tek seferde kendinden imzalı bir kod imzalama sertifikası (SPC - Yazılım Yayıncı Sertifikası ) oluşturabilirsiniz, ancak aşağıdakileri yapmayı tercih ederim:
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ı kaydırmasına izin ver)
Bu, dışa aktarılabilir bir özel anahtarla (-pe) kendinden imzalı (-r) bir sertifika oluşturur. Adı "CA'm" ve geçerli kullanıcı için CA deposuna konulmalıdır. Biz kullanıyoruz SHA-256 algoritması. Anahtar, imzalamak içindir (-sky).
Özel anahtarın MyCA.pvk dosyasında ve sertifikanın MyCA.cer dosyasında depolanması gerekir.
Güvenmiyorsanız CA sertifikasına sahip olmanın bir anlamı olmadığından, sertifikayı Windows sertifika deposuna aktarmanız gerekir. Sen olabilir ama komut satırından, Sertifikalar MMC ekranından kullanın:
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
Yukarıdakiyle hemen hemen aynıdır, ancak bir yayıncı anahtarı ve sertifikası (-ic ve -iv anahtarları) sağlıyoruz.
Ayrıca sertifikayı ve anahtarı bir PFX dosyasına dönüştürmek isteyeceğiz:
pvk2pfx -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx
PFX dosyasını korumak istiyorsanız, -po anahtarını ekleyin, aksi takdirde PVK2PFX, parolasız bir PFX dosyası oluşturur.
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
İçin bazı olası zaman damgası URL'leri signtool /t
:
http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
.NET geliştiricisi olmayanlar için Windows SDK ve .NET çerçevesinin bir kopyasına ihtiyacınız olacaktır. Bir akım bağlantı burada mevcuttur: SDK & .NET (ki MakeCert yükler C:\Program Files\Microsoft SDKs\Windows\v7.1
). Kilometreniz değişebilir.
MakeCert, Visual Studio Komut İstemi'nden edinilebilir. Visual Studio 2015 var ve Windows 7'de 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.
E=your@email
. Örn:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
Sertifikayı kod imzalamak için kullanılabilecek şekilde Genişletilmiş Kullanım anahtar bayrağına ihtiyacınız yok mu (powershell eksikse komut dosyalarını imzalayamadığını biliyorum)
Yanıtta belirtildiği gibi, kendi komut dosyanızı imzalamak için kullanımdan kaldırılmış bir yol kullanmak için, New-SelfSignedCertificate kullanılmalıdır .
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], birden fazla sertifikanız olduğu durumlar için bu çalışmayı gerçekleştirecektir ... Açıkça, dizinin kullanmak istediğiniz sertifikayla eşleşmesini sağlayın ... veya filtrelemek için bir yöntem kullanın (tromprint veya yayıncı tarafından).
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)
Açıkçası, anahtarı ayarladıktan sonra, diğer komut dosyalarını onunla imzalayabilirsiniz. Bu makalede
daha ayrıntılı bilgi ve sorun giderme ile ilgili yardım alabilirsiniz .
(get-ChildItem ...)
birden fazla sertifika dönen nedeniyle , ben "[0]" sonuna koymak ve işe yaradı. AsExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
Roger'ın cevabı çok yardımcı oldu.
Yine de kullanmakta biraz sorun yaşadım ve kırmızı "Windows bu sürücü yazılımının yayıncısını doğrulayamıyor" hata iletişim kutusunu almaya devam ettim. Anahtar, test kök sertifikasını
certutil -addstore Root Demo_CA.cer
Roger'ın cevabı pek örtmedi.
İşte benim için çalışan bir toplu iş dosyası (benim .inf dosyası ile dahil değildir). GUI araçları olmadan baştan sona nasıl yapılacağını gösterir (birkaç şifre istemi 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
Powershell'deki New-SelfSignedCertificate komutunu kullanmak oldukça kolaydır . Powershell'i açın ve bu 3 komutu çalıştırın.
1) Sertifika oluşturun :
$ cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Tip KoduSigning -CertStoreLocation Cert: \ CurrentUser \ My2) şifresini ayarlayın :
$ CertPassword = ConvertTo-SecureString -String "my_passowrd" -Force –AsPlainText3) Dışa aktarın :
Export-PfxCertificate -Cert "cert: \ CurrentUser \ My \ $ ($ cert.Thumbprint)" -FilePath "d: \ selfsigncert.pfx" -Şifre $ CertPassword
Selfsigncert.pfx sertifikanız @D:/
İsteğe bağlı adım: Ayrıca sistem ortamı değişkenlerine sertifika parolası eklemeniz gerekir. cmd olarak aşağıya girerek bunu yapın:setx CSC_KEY_PASSWORD "my_password"
PowerShell 4.0'dan (Windows 8.1 / Server 2012 R2) makecert.exe olmadan Windows'ta bir sertifika oluşturmak mümkündür .
İhtiyacınız olan komutlar New-SelfSignedCertificate ve Export-PfxCertificate'dur .
Talimatlar PowerShell ile Kendinden İmzalı Sertifikalar Oluşturma bölümünde verilmiştir .