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 , timestamp lub 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 , /ds i /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
, /ag
lub /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