Udostępnij za pośrednictwem


SignTool

SignTool to narzędzie wiersza polecenia, które cyfrowo podpisuje pliki, weryfikuje podpisy w plikach, usuwa podpisy z plików i pliki sygnatur czasowych. Aby uzyskać informacje o tym, dlaczego pliki podpisywania są ważne, zobacz Wprowadzenie do podpisywania kodu.

Narzędzie SignTool jest dostępne w ramach zestawu Sdk (Software Development Kit) systemu Windows. Narzędzie jest instalowane w folderze \Bin ścieżki instalacji zestawu Windows SDK, na przykład: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe.

Nuta

Zestaw Windows SDK, Windows Hardware Lab Kit (HLK), Windows Driver Kit (WDK)i Windows Assessment and Deployment Kit (ADK) kompilacje 20236 i nowsze wymagają określenia algorytmu szyfrowania. Polecenie SignTool sign wymaga opcji algorytmu skrótu pliku (/fd) i opcji algorytmu skrótu sygnatury czasowej (/td) podczas podpisywania i oznaczania czasowego, odpowiednio.

Jeśli /fd nie zostanie określony podczas podpisywania i jeśli /td nie zostanie określony podczas sygnatury czasowej, polecenie zgłasza ostrzeżenie, kod błędu 0, początkowo. W nowszych wersjach narzędzia SignTool ostrzeżenie staje się błędem. Zalecamy użycie algorytmu SHA256. Uważa się, że jest ona bezpieczniejsza niż SHA1 przez branżę.

Składnia

signtool [command] [options] [file_name | ...]

Parametry

Argument Opis
command Jedno z czterech poleceń określających operację do wykonania w pliku: catdb, sign, timestamplub verify. Opis każdego polecenia można znaleźć w następnej tabeli.
options Opcja modyfikującą polecenie. Oprócz opcji globalnych /q i /v każde polecenie obsługuje unikatowy zestaw opcji.
file_name Ścieżka do pliku do podpisania.

Narzędzie SignTool obsługuje następujące polecenia:

Polecenie Opis
catdb Dodaje plik wykazu do bazy danych wykazu lub usuwa go z niej. Bazy danych wykazu są używane do automatycznego wyszukiwania plików wykazu i są identyfikowane przez identyfikator GUID. Aby uzyskać listę opcji obsługiwanych przez polecenie catdb, zobacz opcje poleceń bazy danych catdb.
remove Usuwa podpis z pliku. Aby uzyskać listę opcji obsługiwanych przez polecenie remove, zobacz usuń opcje poleceń.
sign Cyfrowo podpisuje pliki. Podpisy cyfrowe chronią pliki przed manipulowaniem i umożliwiają użytkownikom weryfikowanie podpisu na podstawie certyfikatu podpisywania. Aby uzyskać listę opcji obsługiwanych przez polecenie sign, zobacz opcje polecenia podpisywania.
timestamp Pliki sygnatur czasowych. Aby uzyskać listę opcji obsługiwanych przez polecenie timestamp, zobacz opcje poleceń znacznika czasu.
verify Weryfikuje podpis cyfrowy plików. Określa, czy certyfikat podpisywania został wystawiony przez zaufany urząd, czy certyfikat podpisywania został odwołany, i opcjonalnie, czy certyfikat podpisywania jest ważny dla określonych zasad. Aby uzyskać listę opcji obsługiwanych przez polecenie verify, zobacz weryfikować opcje poleceń.

Do wszystkich poleceń Narzędzia SignTool mają zastosowanie następujące opcje:

Opcja globalna Opis
/q Wyświetla brak danych wyjściowych, jeśli polecenie zostanie pomyślnie uruchomione i wyświetli minimalne dane wyjściowe, jeśli polecenie zakończy się niepowodzeniem.
/v Wyświetla pełne dane wyjściowe niezależnie od tego, czy polecenie działa pomyślnie, czy kończy się niepowodzeniem, i wyświetla komunikaty ostrzegawcze.
/debug Wyświetla informacje o debugowaniu.

Opcje poleceń bazy danych Catdb

W poniższej tabeli wymieniono opcje, których można użyć za pomocą polecenia catdb:

Opcja Catdb Opis
/d Określa, że domyślna baza danych wykazu jest aktualizowana. Jeśli nie używasz /d lub /g, narzędzie SignTool aktualizuje składnik systemu i bazę danych sterowników.
guiD /g Określa, że baza danych wykazu zidentyfikowana przez identyfikator GUID jest aktualizowana.
/r Usuwa określony wykaz z bazy danych wykazu. Jeśli ta opcja nie jest określona, narzędzie SignTool dodaje określony wykaz do bazy danych wykazu.
/u Określa, że unikatowa nazwa jest generowana automatycznie dla dodanych plików wykazu. W razie potrzeby nazwy plików wykazu są zmieniane, aby zapobiec konfliktom nazw z istniejącymi plikami wykazu. Jeśli ta opcja nie zostanie określona, narzędzie SignTool zastępuje istniejący wykaz o takiej samej nazwie jak określony wykaz.

Nuta

Bazy danych wykazu są używane do automatycznego wyszukiwania plików wykazu.

Usuń opcje polecenia

W poniższej tabeli wymieniono opcje, których można użyć za pomocą polecenia remove:

Usuń opcję Opis
/c Usuń wszystkie certyfikaty, z wyjątkiem certyfikatu sygnatariusza z podpisu.
/q Brak danych wyjściowych dotyczących powodzenia i minimalnych danych wyjściowych w przypadku niepowodzenia. Jak zawsze narzędzie SignTool zwraca 0 powodzenia i 1 po niepowodzeniu.
/s Całkowicie usuń podpis.
/u Usuń nieuwierzytelnione atrybuty z podpisu, np. podwójne podpisy i znaczniki czasu.
/v Drukuj pełne komunikaty o powodzeniu i stanie. Może to również zawierać nieco więcej informacji na temat błędu.

Opcje polecenia podpisywania

W poniższej tabeli wymieniono opcje, których można użyć za pomocą polecenia sign:

Opcja podpisywania polecenia Opis
/a Automatycznie wybiera najlepszy certyfikat podpisywania. Narzędzie SignTool znajduje wszystkie prawidłowe certyfikaty spełniające wszystkie określone warunki i wybiera ten, który jest ważny przez najdłuższy czas. Jeśli ta opcja nie jest obecna, narzędzie SignTool oczekuje znalezienia tylko jednego prawidłowego certyfikatu podpisywania.
pliku /ac Dodaje inny certyfikat z pliku do bloku podpisu.
/as Dołącza ten podpis. Jeśli nie istnieje podpis podstawowy, ten podpis jest zamiast tego podpisem podstawowym.
/c CertTemplateName Określa nazwę szablonu certyfikatu (rozszerzenie firmy Microsoft) dla certyfikatu podpisywania.
/csp CSPName Określa dostawcę usług kryptograficznych (CSP), który zawiera kontener klucza prywatnego.
/d Desc Określa opis podpisanej zawartości.
ścieżki /dg Generuje skrót do podpisania i niepodpisane pliki PKCS7. Pliki wyjściowe skrótu i PKCS7 są <Ścieżka>\<FileName>.dig i ścieżka <>\<FileName>.p7u. Aby wyświetlić dodatkowy plik XML, użyj /dxml.
ścieżki /di Tworzy podpis przez pozyskiwanie podpisanego skrótu do niepodpisanego pliku PKCS7. Wejściowe pliki szyfrowane i niepodpisane pliki PKCS7 powinny być <Ścieżka>\<FileName>.dig.signed i ścieżka <ścieżka>\<FileName>.p7u.
dll /dlib Określa bibliotekę DLL, która implementuje funkcję AuthenticodeDigestSign w celu podpisania skrótu. Ta opcja jest równoważna użyciu narzędzia SignTool oddzielnie z opcjami /dg, /dsi /di. Ta opcja wywołuje wszystkie trzy jako jedną operację niepodzielna.
/dmdf nazwa pliku Jeśli jest używana z opcją /dg, przekazuje zawartość pliku do funkcji AuthenticodeDigestSign bez modyfikacji.
/ds Podpisuje tylko skrót. Plik wejściowy powinien być skrótem wygenerowany przez opcję /dg. Plik wyjściowy to: plik <>.signed.
adresu URL /du Określa ujednolicony lokalizator zasobów (url) dla rozszerzonego opisu podpisanej zawartości.
/dxml W przypadku użycia z opcją /dg tworzy plik XML. Plik wyjściowy to: <Path>\<FileName>.dig.xml.
/f SignCertFile Określa certyfikat podpisywania w pliku. Jeśli plik jest w formacie PFX (Personal Information Exchange) i chroniony hasłem, użyj opcji /p, aby określić hasło. Jeśli plik nie zawiera kluczy prywatnych, użyj opcji /csp i /kc, aby określić nazwę kontenera CSP i klucza prywatnego.
/fd alg Określa algorytm skrótu pliku, który ma być używany do tworzenia podpisów plików. Uwaga: jeśli opcja /fd nie zostanie określona podczas podpisywania, polecenie generuje błąd.
/fd certHash Określenie ciągu "certHash" powoduje użycie algorytmu określonego w certyfikacie podpisywania. Uwaga: jeśli opcja /fd nie zostanie określona podczas podpisywania, polecenie generuje błąd.
/i IssuerName Określa nazwę wystawcy certyfikatu podpisywania. Ta wartość może być podciągem całej nazwy wystawcy.
/kc PrivKeyContainerName Określa nazwę kontenera klucza prywatnego.
/n SubjectName Określa nazwę podmiotu certyfikatu podpisywania. Ta wartość może być podciągem całej nazwy podmiotu.
/nph Jeśli jest obsługiwana, pomija skróty stron dla plików wykonywalnych. Wartość domyślna jest określana przez zmienną środowiskową SIGNTOOL_PAGE_HASHES i wersję wintrust.dll. Ta opcja jest ignorowana dla plików innych niż PE.
haseł /p Określa hasło do użycia podczas otwierania pliku PFX. Użyj opcji /f, aby określić plik PFX.
ścieżki /p7 Określa, że plik PKCS (Public Key Cryptography Standards) #7 jest generowany dla każdego określonego pliku zawartości. Pliki PKCS #7 mają nazwę <ścieżki>\<nazwa pliku>.p7.
wartości /p7ce Określa opcje podpisanej zawartości PKCS #7. Ustaw wartość na Embedded, aby osadzić podpisaną zawartość w pliku PKCS #7 lub DetachedSignedData w celu utworzenia części podpisanych danych odłączonego pliku PKCS #7. Jeśli nie określono opcji /p7ce, podpisana zawartość jest domyślnie osadzona.
/p7co <OID> Określa identyfikator obiektu (OID), który identyfikuje podpisaną zawartość PKCS #7.
/ph Jeśli jest obsługiwana, generuje skróty stron dla plików wykonywalnych.
/r RootSubjectName Określa nazwę podmiotu certyfikatu głównego, do którego musi zostać łańcuch certyfikatu podpisywania. Ta wartość może być podciągem całej nazwy podmiotu certyfikatu głównego.
/s StoreName Określa magazyn do otwarcia, gdy polecenie wyszukuje certyfikat. Jeśli ta opcja nie zostanie określona, polecenie otworzy magazyn My.
skrótu /sha1 Określa skrót SHA1 certyfikatu podpisywania. Skrót SHA1 jest często używany, gdy wiele certyfikatów spełnia kryteria określone przez pozostałe opcje.
/sm Określa, że polecenie używa magazynu maszyn, a nie magazynu użytkownika.
adresu URL /t Określa adres URL serwera sygnatur czasowych. Jeśli ta opcja lub /tr nie jest określona, podpisany plik nie jest sygnaturą czasową. Jeśli sygnatura czasowa zakończy się niepowodzeniem, polecenie wygeneruje ostrzeżenie. Tej opcji nie można używać z opcją /tr.
/td alg Używany z opcją /tr do żądania algorytmu szyfrowania używanego przez serwer sygnatur czasowych RFC 3161. Uwaga: jeśli /td nie jest określony podczas oznaczania czasu, polecenie generuje błąd.
adresu URL /tr Określa adres URL serwera sygnatury czasowej RFC 3161. Jeśli ta opcja lub /t nie jest określona, podpisany plik nie jest sygnaturą czasową. Jeśli sygnatura czasowa zakończy się niepowodzeniem, polecenie wygeneruje ostrzeżenie. Tej opcji nie można używać z opcją /t.
/u użycie Określa rozszerzone użycie klucza (EKU), które musi być obecne w certyfikacie podpisywania. Wartość użycia można określić za pomocą identyfikatora OID lub ciągu. Domyślne użycie to Code Signing lub 1.3.6.1.5.5.7.3.3.
/uw Określa użycie Windows System Component Verification lub 1.3.6.1.4.1.311.10.3.6.

Aby zapoznać się z przykładami użycia, zobacz Using SignTool to SignTool to Sign a File.

Opcje polecenia znacznika czasu

W poniższej tabeli wymieniono opcje, których można użyć za pomocą polecenia timestamp:

Opcja znacznika czasu Opis
/p7 Sygnatury czasowe PKCS #7 plików.
adresu URL /t Określa adres URL serwera sygnatur czasowych. Plik, który jest sygnaturą czasową, musi być wcześniej podpisany. Wymagana jest opcja /t lub /tr.
/td alg Używany z opcją /tr do żądania algorytmu szyfrowania używanego przez serwer sygnatur czasowych RFC 3161. Uwaga: jeśli /td nie jest określona podczas oznaczania czasu, polecenie generuje ostrzeżenie.
indeksu /tp Sygnatura czasowa sygnatury w indeksie.
adresu URL /tr Określa adres URL serwera sygnatury czasowej RFC 3161. Plik, który jest sygnaturą czasową, musi być wcześniej podpisany. Wymagana jest opcja /tr lub /t.

Weryfikowanie opcji poleceń

W poniższej tabeli wymieniono opcje, których można użyć za pomocą polecenia verify:

Sprawdź opcję Opis
/a Określa, że wszystkie metody mogą służyć do weryfikowania pliku. Najpierw narzędzie SignTool przeszukuje bazy danych wykazu, aby określić, czy plik jest zalogowany w wykazie. Jeśli plik nie jest zalogowany w żadnym wykazie, narzędzie SignTool próbuje zweryfikować osadzony podpis pliku. Zalecamy tę opcję podczas weryfikowania plików, które mogą lub nie mogą być zalogowane w wykazie. Przykłady plików, które mogą być podpisane, obejmują pliki lub sterowniki systemu Windows.
/ad Znajduje wykaz przy użyciu domyślnej bazy danych wykazu.
/all Weryfikuje wszystkie podpisy w pliku z wieloma podpisami.
/as Znajduje wykaz przy użyciu bazy danych wykazu składników systemowych (sterowników).
catDBGUID /ag Znajduje wykaz w bazie danych wykazu zidentyfikowany przez identyfikator GUID.
/c CatFile Określa plik wykazu według nazwy.
/d Drukuje adres URL opisu i opisu. System Windows Vista i wcześniejsze: ta opcja nie jest obsługiwana.
indeksu /ds Weryfikuje podpis na określonej pozycji.
/hash{SHA1|SHA256} Określa opcjonalny algorytm wyznaczania wartości skrótu do użycia podczas wyszukiwania pliku w katalogu.
/kp Przeprowadza weryfikację przy użyciu zasad podpisywania sterowników trybu jądra x64.
/ms Używa wielu semantyki weryfikacji. To zachowanie jest ustawieniem domyślnym wywołania WinVerifyTrust.
wersji /o Weryfikuje plik według wersji systemu operacyjnego. Parametr wersji ma postać: <PlatformID>:<VerMajor>.<VerMinor>.<BuildNumber>. Zalecamy użycie opcji /o. Jeśli /o nie zostanie określony, narzędzie SignTool może zwrócić nieoczekiwane wyniki. Jeśli na przykład nie dołączysz /o, katalogi systemu, które poprawnie weryfikują je w starszym systemie operacyjnym, mogą nie zostać prawidłowo zweryfikowane w nowszym systemie operacyjnym.
/p7 Weryfikuje pliki PKCS #7. Do weryfikacji PKCS #7 nie są używane żadne istniejące zasady. Narzędzie SignTool sprawdza podpis i tworzy łańcuch certyfikatu podpisywania.
/pa Określa, że są używane domyślne zasady weryfikacji uwierzytelniania. Jeśli nie określono opcji /pa, narzędzie SignTool używa zasad weryfikacji sterowników systemu Windows. Tej opcji nie można używać z opcjami catdb.
/pg PolicyGUID Określa zasady weryfikacji według identyfikatora GUID. Identyfikator GUID odpowiada ActionID zasad weryfikacji. Tej opcji nie można używać z opcjami catdb.
/ph Drukuj i weryfikuj wartości skrótów strony. System Windows Vista i wcześniejsze: ta opcja nie jest obsługiwana.
/r RootSubjectName Określa nazwę podmiotu certyfikatu głównego, do którego musi zostać łańcuch certyfikatu podpisywania. Ta wartość może być podciągem całej nazwy podmiotu certyfikatu głównego.
/tw Określa, że polecenie generuje ostrzeżenie, jeśli podpis nie jest sygnaturą czasową.

Polecenie SignTool verify określa, czy certyfikat podpisywania został wystawiony przez zaufany urząd, czy certyfikat podpisywania został odwołany, a opcjonalnie, czy certyfikat podpisywania jest ważny dla określonych zasad.

Polecenie SignTool verify zwraca stan osadzonego podpisu, chyba że określono opcję wyszukiwania katalogu, na przykład /a, /ad, /as, /aglub /c.

Wartość zwracana

Narzędzie SignTool zwraca jeden z następujących kodów zakończenia po zakończeniu działania:

Kod zakończenia Opis
0 Wykonanie zakończyło się pomyślnie.
1 Wykonanie nie powiodło się.
2 Wykonanie zostało zakończone z ostrzeżeniami.

Przykłady

Następujące polecenie dodaje plik wykazu MyCatalogFileName.cat do bazy danych składników systemu i sterowników. Opcja /u generuje unikatową nazwę w razie potrzeby, aby zapobiec zastąpieniu istniejącego pliku wykazu o nazwie MyCatalogFileName.cat.

signtool catdb /v /u MyCatalogFileName.cat

Następujące polecenie podpisuje plik automatycznie przy użyciu najlepszego certyfikatu.

signtool sign /a /fd SHA256 MyFile.exe 

Następujące polecenie cyfrowo podpisuje plik przy użyciu certyfikatu przechowywanego w pliku PFX chronionym hasłem.

signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe 

Następujące polecenie cyfrowo podpisuje i sygnatury czasowe pliku. Certyfikat używany do podpisywania pliku jest przechowywany w pliku PFX.

signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe 

Następujące polecenie podpisuje plik przy użyciu certyfikatu znajdującego się w magazynie My, który ma nazwę podmiotu My Company Certificate.

signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe 

Następujące polecenie podpisuje kontrolkę ActiveX i udostępnia informacje wyświetlane w przeglądarce po wyświetleniu monitu o zainstalowanie kontrolki.

signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe 

Następujące polecenie oznacza sygnaturę czasową pliku, który został już podpisany cyfrowo.

signtool timestamp /t http://timestamp.digicert.com MyFile.exe

Następujące polecenie oznacza sygnaturę czasową pliku przy użyciu serwera sygnatury czasowej RFC 3161.

signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe

Następujące polecenie sprawdza, czy plik został podpisany.

signtool verify MyFile.exe

Następujące polecenie weryfikuje plik systemowy, który można zalogować w wykazie.

signtool verify /a SystemFile.dll

Następujące polecenie weryfikuje plik systemowy, który jest zalogowany w katalogu o nazwie MyCatalog.cat.

signtool verify /c MyCatalog.cat SystemFile.dll

Następujące polecenie całkowicie usuwa podpis z pliku.

signtool remove /s MyFile.exe

Zobacz też

używanie narzędzia SignTool do podpisywania pliku

Wprowadzenie do podpisywania kodu