Jak utworzyć certyfikat z podpisem własnym do podpisywania kodu w systemie Windows?

Jak utworzyć certyfikat z podpisem własnym do podpisywania kodu przy użyciu narzędzi z zestawu SDK systemu Windows?

Author: Roger Lipscombe, 2008-09-17

5 answers

Zaktualizowana Odpowiedź

Jeśli używasz następujących wersji systemu Windows lub nowszych: Windows Server 2012, Windows Server 2012 R2 lub Windows 8.1, to MakeCert jest teraz przestarzały , a Microsoft zaleca użycie PowerShell Cmdlet New-SelfSignedCertificate.

Jeśli używasz starszej wersji, takiej jak Windows 7, musisz trzymać się MakeCert lub innego rozwiązania. Niektórzy ludzie sugerują infrastrukturę klucza publicznego Moduł Powershell (PSPKI) .

Oryginalna Odpowiedź

Chociaż możesz utworzyć certyfikat podpisujący się własnym kodem (SPC-Software Publisher Certificate) za jednym razem, wolę wykonać następujące czynności:

W 2007 roku firma została założona przez firmę cateringową Cushman & Wakefield.]}
makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser ^
         -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer

(^ = Zezwalaj wierszu poleceń wsadowych na zawijanie wiersza)

Tworzy certyfikat z własnym podpisem (-r) z eksportowalnym kluczem prywatnym (- pe). Nazywa się "My CA" i powinien być umieszczony w CA sklep dla bieżącego użytkownika. Używamy algorytmu SHA-256 . Klucz jest przeznaczony do podpisywania (- sky).

Klucz prywatny powinien być przechowywany w Myca.plik pvk i certyfikat w MyCA.plik cer.

Importowanie certyfikatu CA

Ponieważ nie ma sensu mieć certyfikatu CA, jeśli mu nie ufasz, musisz zaimportować go do magazynu certyfikatów systemu Windows. Możesz używać certyfikatów MMC snapin, ale z polecenia linia:

certutil -user -addstore Root MyCA.cer
W tym celu należy utworzyć certyfikat podpisywania kodu (SPC).]}
makecert -pe -n "CN=My SPC" -a sha256 -cy end ^
         -sky signature ^
         -ic MyCA.cer -iv MyCA.pvk ^
         -sv MySPC.pvk MySPC.cer

Jest prawie taki sam jak powyżej, ale dostarczamy klucz emitenta i certyfikat (przełączniki-ic i-iv).

Chcemy również przekonwertować certyfikat i klucz do pliku PFX:

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

Jeśli chcesz chronić plik PFX, dodaj przełącznik-po, w przeciwnym razie PVK2PFX utworzy plik PFX bez hasła.

Używanie certyfikatu do podpisywania kod

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

(Zobacz dlaczego znaczniki czasu mogą mieć znaczenie )

Jeśli zaimportujesz plik PFX do magazynu certyfikatów (możesz użyć PVKIMPRT lub MMC snapin), możesz podpisać kod w następujący sposób:

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

Możliwe adresy URL znaczników czasu dla signtool /t to:

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

Full Microsoft dokumentacja

Pliki do pobrania

Dla tych, którzy nie są programistami. NET, będziesz potrzebował kopii Windows SDK i. NET framework. Aktualny link jest dostępny tutaj: SDK&. net (który instaluje makecert w C:\Program Files\Microsoft SDKs\Windows\v7.1). Przebieg może się różnić.

MakeCert jest dostępny z wiersza poleceń programu Visual Studio. Visual Studio 2015 ma go i może być uruchamiany z menu Start w systemie Windows 7 w "wierszu polecenia programisty dla VS 2015" lub "wierszu polecenia VS2015 x64 natywne narzędzia" (prawdopodobnie wszystkie z nich w tym samym folderze).

 323
Author: Roger Lipscombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-09 18:33:57

Odpowiedź Rogera była bardzo pomocna.

Miałem jednak mały problem z używaniem go i wciąż otrzymywałem czerwone okno dialogowe" Windows nie może zweryfikować wydawcy tego oprogramowania sterownika". Kluczem było zainstalowanie certyfikatu głównego testu z

certutil -addstore Root Demo_CA.cer
Której odpowiedź Rogera nie pokrywała.

Oto plik wsadowy, który działał dla mnie (z moim .plik inf, nie dołączony). Pokazuje, jak to zrobić od początku do końca, bez narzędzi GUI w ogóle (poza kilkoma hasłami podpowiedzi).

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
 16
Author: Dan Kegel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-18 08:39:12

Od wersji PowerShell 4.0 (Windows 8.1 / Server 2012 R2) możliwe jest utworzenie certyfikatu w systemie Windows bez makecerta .exe .

Potrzebne polecenia to New-SelfSignedCertificateoraz Export-PfxCertificate.

Instrukcje są w Tworzenie certyfikatów z własnym podpisem za pomocą PowerShell.

 11
Author: Yishai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-18 08:40:59

Jest to dość łatwe użycie New-SelfSignedCertificate w Powershell. Otwórz powershell i uruchom te 3 polecenia.

1) Utwórz certyfikat :
$cert = New-SelfSignedCertificate -DnsName www.yourwebsite.com -Type CodeSigning-CertStoreLocation Cert: \ CurrentUser \ My

2) ustaw dla niego hasło :
$CertPassword = ConvertTo-SecureString - String "my_passowrd" - Force-AsPlainText

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

Twój certyfikat selfsigncert.pfx będzie zlokalizowany @ D:/


Opcjonalny krok: wymagane jest również dodanie hasła certyfikatu do systemowych zmiennych środowiskowych. zrób to wpisując poniżej w cmd: setx CSC_KEY_PASSWORD "my_password"

 8
Author: JerryGoyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-23 13:20:54

Jak stwierdzono w odpowiedzi, aby użyć nieaktualnego sposobu podpisywania własnego skryptu, należy użyć New-SelfSignedCertificate.

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

  2. Eksport certyfikatu bez klucza prywatnego:
    Export-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt [0] sprawi, że będzie to działać w przypadkach, gdy masz więcej niż jeden certyfikat... Oczywiście, aby indeks był zgodny z certyfikatem, którego chcesz użyć... lub użyć sposobu filtrowania (przez thumprint lub emitent).

  3. Importuj go jako zaufanego wydawcę
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\TrustedPublisher

  4. Zaimportuj go jako główny urząd certyfikacji.
    Import-Certificate -FilePath .\code_signing.crt -Cert Cert:\CurrentUser\Root

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

Oczywiście po skonfigurowaniu klucza, możesz po prostu podpisać za jego pomocą Inne skrypty.
Więcej szczegółowych informacji i pomoc w rozwiązywaniu problemów można znaleźć w w tym artykule .

 5
Author: chaami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-08 05:55:48