Jak utworzyć samopodpisany certyfikat do podpisywania kodu przy użyciu narzędzi z zestawu Windows SDK?
security
code-signing
Roger Lipscombe
źródło
źródło
Odpowiedzi:
Zaktualizowana odpowiedź
Jeśli korzystasz z następujących wersji systemu Windows lub nowszej: Windows Server 2012, Windows Server 2012 R2 lub Windows 8.1, MakeCert jest teraz przestarzały , a Microsoft zaleca korzystanie z polecenia PowerShell Cmdlet New-SelfSignedCertificate .
Jeśli używasz starszej wersji, takiej jak Windows 7, musisz trzymać się MakeCert lub innego rozwiązania. Niektórzy wskazują na infrastrukturze klucza publicznego PowerShell (PSPKI) Module .
Oryginalna odpowiedź
Chociaż możesz utworzyć samopodpisany certyfikat podpisujący kod (SPC - Software Publisher Certificate ) za jednym razem, wolę wykonać następujące czynności:
Tworzenie samopodpisanego urzędu certyfikacji (CA)
(^ = zezwól, aby wiersz polecenia wsadowego zawinął wiersz)
To tworzy samopodpisany certyfikat (-r) z eksportowalnym kluczem prywatnym (-pe). Nazywa się „Mój urząd certyfikacji” i należy go umieścić w sklepie urzędu certyfikacji dla bieżącego użytkownika. Używamy algorytmu SHA-256 . Klucz służy do podpisywania (-sky).
Klucz prywatny powinien być przechowywany w pliku MyCA.pvk, a certyfikat w pliku MyCA.cer.
Importowanie certyfikatu CA
Ponieważ nie ma sensu mieć certyfikatu CA, jeśli mu nie ufasz, musisz zaimportować go do magazynu certyfikatów Windows. Państwo może użyć przystawki MMC Certyfikaty, ale z linii poleceń:
Tworzenie certyfikatu do podpisywania kodu (SPC)
Jest prawie taki sam jak powyżej, ale zapewniamy klucz wystawcy i certyfikat (przełączniki -ic i -iv).
Będziemy również chcieli przekonwertować certyfikat i klucz do pliku PFX:
Jeśli chcesz chronić plik PFX, dodaj przełącznik -po, w przeciwnym razie PVK2PFX utworzy plik PFX bez hasła.
Korzystanie z certyfikatu do podpisywania kodu
( Zobacz, dlaczego znaczniki czasu mogą mieć znaczenie )
Jeśli importujesz plik PFX do magazynu certyfikatów (możesz użyć PVKIMPRT lub przystawki MMC), możesz podpisać kod w następujący sposób:
Niektóre możliwe adresy URL znaczników czasu dla
signtool /t
:http://timestamp.verisign.com/scripts/timstamp.dll
http://timestamp.globalsign.com/scripts/timstamp.dll
http://timestamp.comodoca.com/authenticode
Pełna dokumentacja Microsoft
Pliki do pobrania
Dla tych, którzy nie są programistami .NET, potrzebujesz kopii zestawu Windows SDK i .NET Framework. Aktualny link jest dostępny tutaj: SDK i .NET (który instaluje makecert w
C:\Program Files\Microsoft SDKs\Windows\v7.1
). Twój przebieg może się różnić.MakeCert jest dostępny z wiersza polecenia programu Visual Studio. Program Visual Studio 2015 ma go i można go uruchomić z menu Start w systemie Windows 7 pod „Wiersz polecenia programisty dla VS 2015” lub „Wiersz polecenia narzędzia macierzystego VS2015 x64” (prawdopodobnie wszystkie w tym samym folderze).
źródło
E=your@email
. Np .:makecert -pe -n "CN=My SPC,E=email@domain" ........
-eku 1.3.6.1.5.5.7.3.3
aby certyfikat mógł być używany do podpisywania kodu (wiem, że PowerShell nie podpisuje skryptów, jeśli go brakuje)Jak stwierdzono w odpowiedzi, aby użyć nieaktualnego sposobu podpisywania własnego skryptu, należy użyć New-SelfSignedCertificate .
[0] sprawi, że będzie to działać w przypadkach, gdy masz więcej niż jeden certyfikat ... Oczywiście dopasuj indeks do certyfikatu, którego chcesz użyć ... lub użyj metody filtrowania (według odcisków lub wystawców).
Oczywiście po skonfigurowaniu klucza możesz po prostu podpisać nim inne skrypty.
Więcej szczegółowych informacji i pomoc w rozwiązywaniu problemów można znaleźć w tym artykule .
źródło
(get-ChildItem ...)
zwrot więcej niż jednego certyfikatu, więc umieściłem „[0]” na końcu i zadziałało. Jak wExport-Certificate -Cert (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)[0] -FilePath code_signing.crt
Odpowiedź Rogera była bardzo pomocna.
Miałem jednak trochę problemów z korzystaniem z niego i ciągle pojawiało się czerwone okno dialogowe błędu „Windows nie może zweryfikować wydawcy tego sterownika”. Kluczem było zainstalowanie testowego certyfikatu głównego za pomocą
którego odpowiedź Rogera nie do końca obejmowała.
Oto plik wsadowy, który działał dla mnie (z moim plikiem .inf, nie dołączonym). Pokazuje, jak to zrobić od początku do końca, bez żadnych narzędzi GUI (z wyjątkiem kilku monitów o hasło).
źródło
Korzystanie z polecenia New-SelfSignedCertificate w programie Powershell jest dość łatwe . Otwórz PowerShell i uruchom te 3 polecenia.
Twój certyfikat selfsigncert.pfx będzie znajdować się @
D:/
Krok opcjonalny: Wymagane będzie również dodanie hasła certyfikatu do zmiennych środowiskowych systemu. zrób to wpisując poniżej w cmd:
setx CSC_KEY_PASSWORD "my_password"
źródło
Począwszy od programu PowerShell 4.0 (Windows 8.1 / Server 2012 R2) można utworzyć certyfikat w systemie Windows bez makecert.exe .
Potrzebne polecenia to New-SelfSignedCertificate i Export-PfxCertificate .
Instrukcje dotyczą tworzenia certyfikatów z podpisem własnym za pomocą programu PowerShell .
źródło