Jak podpisać sterownik w systemie Windows x64 10 / 8.1 / 7 przy użyciu samopodpisanego certyfikatu

Wszystkie 64-bitowe wersje systemu Windows, poczynając od Windows 7, domyślnie zabraniają instalowania sterowników urządzeń, które nie są podpisane prawidłowym podpisem cyfrowym. Niepodpisane sterowniki są blokowane przez system operacyjny. Obecność podpisu cyfrowego gwarantuje (do pewnego stopnia), że sterownik został wydany przez określonego programistę lub dostawcę, a jego kod nie został zmodyfikowany po podpisaniu.

W systemie Windows 10/7 x64 istnieje kilka sposobów na wyłączenie weryfikacji podpisu cyfrowego zainstalowanego sterownika: za pomocą Zasad grupy lub trybu uruchamiania systemu testowego (więcej szczegółów znajduje się w artykule Wyłączanie weryfikacji podpisu cyfrowego w przypadku instalowania niepodpisanych sterowników w systemie Windows)..

Dziś pokażemy, jak możesz samopodpisuj dowolny niepodpisany sterownik dla wersji 64-bitowej Windows 10 lub Windows 7.

Załóżmy, że mamy sterownik dla jakiegoś urządzenia dla systemu Windows 10 lub Windows 7 x64, które nie ma podpisu cyfrowego (w naszym przykładzie będzie to sterownik raczej starej karty graficznej). Archiwum sterowników dla naszej wersji systemu Windows (udało mi się znaleźć sterownik dla systemu Windows Vista x64) zostało pobrane ze strony internetowej producenta, a jego zawartość została rozpakowana w katalogu c: \ tools \ drv1 \. Spróbujmy zainstalować sterownik, dodając go do repozytorium sterowników systemu Windows za pomocą standardowego narzędzia pnputil.

Pnputil -a "C: \ tools \ drv1 \ xg20gr.inf"

Uwaga. To i wszystkie kolejne polecenia są wykonywane w wierszu poleceń uruchamianym z uprawnieniami administratora..

Podczas instalacji system Windows 7 wyświetli ostrzeżenie, że system nie może zweryfikować podpisu cyfrowego tego sterownika.

W systemie Windows 10 takie ostrzeżenie nawet się nie pojawia, aw konsoli pojawia się ostrzeżenie, że w pliku INF innej firmy nie ma informacji o podpisie cyfrowym.

Podczas próby instalacji sterownika z Eksploratora Windows, kliknij RMB na pliku inf sterownika i wybierz Zainstaluj / Zainstaluj pojawi się błąd:

INF innej firmy nie zawiera informacji o podpisie cyfrowym.

INF innej firmy nie zawiera informacji o podpisie.

Spróbujmy podpisać ten sterownik za pomocą samopodpisanego certyfikatu.

Treść

  • Narzędzia wymagane do podpisania sterownika
  • Utwórz samopodpisany certyfikat i klucz prywatny
  • Wygeneruj plik sterownika CAT
  • Podpisujemy sterownik certyfikatem z podpisem własnym
  • Instalacja certyfikatu
  • Instalowanie sterownika certyfikowanego przez samopodpisany certyfikat

Narzędzia wymagane do podpisania sterownika

Aby działać, musimy pobrać i zainstalować (z ustawieniami domyślnymi) następujące narzędzia programistyczne aplikacji dla systemu Windows.

  • Windows SDK (lub Microsoft Visual Studio 2005 lub nowszy) dla twojej wersji Windows - te pakiety zawierają narzędzia do podpisywania Windows SDK dla Desktop, które zawierają potrzebne narzędzie - signtool.exe;
  • Windows Driver Kit 7.1.0 - Obraz ISO  GRMWDK_EN_7600_1.ISO rozmiar 649 Mb
Wskazówka. W systemie Windows 10 można używać nowszych wersji zestawu Windows SDK i zestawu sterowników Windows. Przed zainstalowaniem tych narzędzi upewnij się, że .NET Framework 4 jest zainstalowany w twoim systemie..

Utwórz samopodpisany certyfikat i klucz prywatny

Utwórz katalog C: \ DriverCert w katalogu głównym dysku.

Otwórz wiersz poleceń i przejdź do następującego katalogu:

cd C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.1 \ bin

Utwórz samopodpisany certyfikat i klucz prywatny wydany, powiedzmy, dla Winitpro:

makecert -r -sv C: \ DriverCert \ myDrivers.pvk -n CN = "Winitpro" C: \ DriverCert \ MyDrivers.cer

Podczas tworzenia narzędzie poprosi o podanie hasła do klucza, niech tak będzie P.@ss0wrd.

Na podstawie wygenerowanego certyfikatu utwórz klucz publiczny dla certyfikatu wydawcy oprogramowania (PKCS).

cert2spc C: \ DriverCert \ myDrivers.cer C: \ DriverCert \ myDrivers.spc

Połącz klucz publiczny (.spc) i klucz prywatny (.pvk) w jednym pliku certyfikatu wymiany informacji osobistych (.pfx).

pvk2pfx -pvk C: \ DriverCert \ myDrivers.pvk -pi P @ ss0wrd -spc C: \ DriverCert \ myDrivers.spc -pfx C: \ DriverCert \ myDrivers.pfx -po P @ ss0wrd

Wskazówka. Za pomocą polecenia cmdlet programu PowerShell 5.0 można utworzyć samopodpisany certyfikat typu Podpisywanie kodu bez użycia narzędzi innych firm - New-SelfSifgnedCertificate.

$ cert = New-SelfSignedCertificate -Temat „Winitpro” -Type CodeSigningCert -CertStoreLocation cert: \ LocalMachine \ My

Następnie musisz wyeksportować ten certyfikat do pliku pfx z hasłem:

$ CertPassword = ConvertTo-SecureString -String „P @ ss0wrd” -Force -AsPlainText
Export-PfxCertificate -Cert $ cert -FilePath C: \ DriverCert \ myDrivers.pfx -Password $ CertPassword

Wskazówka. Chociaż certyfikat ma ograniczony okres ważności, wygaśnięcie certyfikatu CodeSigning oznacza, że ​​nie można tworzyć nowych podpisów. Ważność sterownika już podpisanego tym certyfikatem jest nieograniczona (lub stare podpisy są ważne dla określonego znacznika czasu).

Wygeneruj plik sterownika CAT

Utwórz katalog C.: \Drivercert\xg i skopiuj do niego wszystkie pliki z katalogu, do którego pierwotnie rozpakowano archiwum ze sterownikiem (c: \ tools \ drv1 \). Upewnij się, że wśród plików znajdują się pliki z rozszerzeniem .sys i .inf (w naszym przypadku xg20grp.sys i xg20gr).

Przejdźmy do katalogu:

cd C: \ WinDDK \ 7600.16385.1 \ bin \ selfsign

Na podstawie pliku inf, za pomocą narzędzia inf2cat.exe (zawartego w zestawie Windows Driver Kit -WDK), wygenerujemy plik cat dla naszej platformy (zawierający informacje o wszystkich plikach pakietu sterowników).

inf2cat.exe / driver: "C: \ DriverCert \ xg" / os: 7_X64 / verbose

Aby upewnić się, że procedura była poprawna, sprawdź, czy komunikaty znajdują się w dzienniku:

Test zdolności wiązania został zakończony.
i
Generowanie katalogu zakończone.

Wskazówka. W moim przypadku polecenie Inf2Cat.exe zwróciło błąd:

Test zdatności.

Błędy:

22.9.7: DriverVer ustawiony na niepoprawną datę (musi być datowany na 21.04.2009 dla najnowszego systemu operacyjnego) w \ hdx861a.inf

Aby naprawić błąd, w sekcji [Wersja] znajdź wiersz DriverVer = i zamień go na:

DriverVer = 05/01 / 2009,9.9.9.9.9

Po wykonaniu polecenia plik g20gr.cat powinien zostać zaktualizowany w katalogu sterowników

Podpisujemy sterownik certyfikatem z podpisem własnym

Przejdź do katalogu:

cd „C: \ Program Files (x86) \ Windows Kits \ 10 \ bin \ 10.0.17134.0 \ x64”

Podpisamy zestaw plików sterowników utworzonym przez nas certyfikatem, jako usługi znaczników czasu (znaczników czasu) wykorzystamy zasób Globalsign. Następujące polecenie cyfrowo podpisuje plik CAT za pomocą certyfikatu zapisanego w pliku PFX chronionym hasłem.

signtool sign / f C: \ DriverCert \ myDrivers.pfx / p P @ ss0wrd / t http://timestamp.globalsign.com/scripts/timstamp.dll / v „C: \ DriverCert \ xg \ xg20gr.cat”

Jeśli plik został podpisany pomyślnie, powinny pojawić się następujące elementy:

Pomyślnie podpisano: C: \ DriverCert \ xg \ xg20gr.cat
Liczba plików pomyślnie podpisanych: 1

Uwaga. Sterownik jest podpisany cyfrowo w pliku .cat, do którego odwołuje się plik sterownika .inf. Za pomocą następującego polecenia możesz zweryfikować podpis cyfrowy sterownika w pliku cat:

SignTool weryfikuje / v / pa c: \ DriverCert \ xg \ xg20gr.cat

Lido we właściwościach pliku na karcie Podpisy cyfrowe.

Plik CAT zawiera podpisy cyfrowe (odciski palców) wszystkich plików znajdujących się w katalogu sterowników (pliki wymienione w pliku INF w sekcji Pliki kopii) Jeśli którykolwiek z tych plików został zmodyfikowany, suma kontrolna plików nie będzie zbieżna z danymi w pliku CAT, w wyniku czego instalacja takiego sterownika zakończy się niepowodzeniem.

Instalacja certyfikatu

Ponieważ utworzony przez nas certyfikat jest samopodpisany, system domyślnie go nie ufa. Dodaj nasz certyfikat do lokalnego magazynu certyfikatów. Można to zrobić za pomocą poleceń:

certmgr.exe -add C: \ DriverCert \ myDrivers.cer -s -r localMachine ROOT
certmgr.exe -add C: \ DriverCert \ myDrivers.cer -s -r localMachine TRUSTEDPUBLISHER

Lub z graficznego kreatora dodawania certyfikatów (certyfikat musi być umieszczony w pamięci Zaufany Wydawcy i Zaufany Root Certyfikacja Władze lokalna maszyna) W domenie możesz centralnie dystrybuować ten certyfikat na stacje robocze za pomocą Zasad Grupy.

Uwaga. Możesz sprawdzić dostępność certyfikatu, który utworzyliśmy w zaufanych, otwierając przystawkę do zarządzania certyfikatami (certmgr.msc) i sprawdzając obecność utworzonego przez nas certyfikatu (wystawionego dla winitpro) w odpowiednich sklepach.

Uwaga. Podczas sprawdzania magazynu certyfikatów za pomocą narzędzia Sigcheck ten certyfikat zostanie wyświetlony jako niezaufany, ponieważ nie ma go na liście certyfikatów głównych Microsoft (lista ta musi być okresowo aktualizowana).

Instalowanie sterownika certyfikowanego przez samopodpisany certyfikat

Spróbujmy ponownie zainstalować sterownik, który podpisaliśmy, uruchamiając polecenie:

Pnputil -i -a C: \ DriverCert \ xg20 \ xg20gr.inf

Teraz podczas instalacji sterownika nie pojawi się okno ostrzegające o brakującym podpisie cyfrowym sterownika.

Pomyślnie zainstalowano sterownik na urządzeniu w systemie.
Pakiet sterowników został dodany pomyślnie.

W systemie Windows 7 pojawia się to ostrzeżenie. o tym, czy masz pewność, że chcesz zainstalować ten sterownik (w Windows 10 x64 1803 takie okno wyskakujące nie pojawia się). Klikając „Zainstaluj", instalujesz sterownik w systemie.

Jeśli z jakiegoś powodu sterownik nie został zainstalowany, w pliku znajduje się szczegółowy dziennik instalacji sterownika C.: \ Windows\ inf\ setupapi.dev.log. Ten dziennik pozwoli ci uzyskać bardziej szczegółowe informacje o błędzie instalacji. W większości przypadków występuje błąd „Sprawdzanie poprawności podpisu pakietu sterownika nie powiodło się” - najprawdopodobniej oznacza to, że certyfikat sterownika nie został dodany do zaufanych certyfikatów.

Jeśli instalacja sterownika zakończyła się powodzeniem, w pliku setupapi.dev.log pojawią się następujące wiersze:

>>> [Instalacja urządzenia (DiInstallDriver) - C: \ WINDOWS \ System32 \ DriverStore \ FileRepository \ xg20gr.inf_amd64_c5955181485ee80a \ xg20gr.inf] >>> Rozpoczęcie sekcji 2018/07/22 23: 32: 57.015 cmd: Pnputil -i - ac: \ DriverCert \ xg \ xg20gr.inf ndv: Flagi: 0x00000000 ndv: Ścieżka INF: C: \ WINDOWS \ System32 \ DriverStore \ FileRepository \ xg20gr.inf_amd64_c5955181485ee80a \ xg20gr.inf inf: SetupCopyOEMInf: SetupCopyOEMInf: DriverStore \ FileRepository \ xg20gr.inf_amd64_c5955181485ee80a \ xg20gr.inf 23: 32: 57.046 inf: Styl kopiowania: 0x00000000 inf: Ścieżka do Store Driver: C: \ WINDOWS \ System32 \ DriverStore \ FileRepository \ xg20gr.inf_amd14_inf595 Ścieżka inf .: C: \ WINDOWS \ INF \ oem23.inf inf: Wyjście SetupCopyOEMInf (0x00000000) 23: 32: 57.077 <<<  Section end 2018/07/22 23:32:57.155 <<<  [Exit status: SUCCESS]

Jak widać, aby zainstalować sterownik z podpisem własnym, nie musieliśmy nawet wyłączać weryfikacji podpisów cyfrowych sterowników za pomocą programu bcdedit.exe, jak opisano tutaj (polecenia bcdedit.exe / set loadoptions DISABLE_INTEGRITY_CHECKS i bcdedit.exe / set Testigning ON).