SignTool
SignTool je nástroj příkazového řádku, který digitálně podepisuje soubory, ověřuje podpisy v souborech, odebírá podpisy ze souborů a soubory časových razítek. Informace o tom, proč jsou podpisové soubory důležité, najdete v tématu Úvod k podepisování kódu.
SignTool je k dispozici jako součást sady Windows Software Development Kit (SDK). Nástroj se nainstaluje do složky \Bin
instalační cesty sady Windows SDK, například: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
.
Poznámka
Sada Windows SDK, Windows Hardware Lab Kit (HLK), Windows Driver Kit (WDK)a Windows Assessment and Deployment Kit (ADK) sestavení 20236 a novější vyžadují, abyste zadali algoritmus digest. Příkaz SignTool sign
vyžaduje možnost algoritmu hash souboru (/fd
) a možnost algoritmu hash časového razítka (/td
) během podepisování a časového razítka.
Pokud /fd
není zadán během podepisování a pokud /td
není zadán během časového razítka, vyvolá příkaz na začátku upozornění, kód chyby 0. V novějších verzích SignTool se upozornění změní na chybu. Doporučujeme SHA256. Obor považuje za bezpečnější než SHA1.
Syntax
signtool [command] [options] [file_name | ...]
Parametry
Argument | Popis |
---|---|
command |
Jeden ze čtyř příkazů, které určují operaci, která se má provést se souborem: catdb , sign , timestamp nebo verify . Popis jednotlivých příkazů najdete v další tabulce. |
options |
Možnost, která upraví příkaz. Kromě globálních /q a možností /v podporuje každý příkaz jedinečnou sadu možností. |
file_name |
Cesta k souboru, který se má podepsat. |
SignTool podporuje následující příkazy:
Příkaz | Popis |
---|---|
catdb |
Přidá do databáze katalogu soubor katalogu nebo ho odebere. Databáze katalogu se používají pro automatické vyhledávání souborů katalogu a jsou identifikovány identifikátorem GUID. Seznam možností podporovaných příkazem catdb naleznete v tématu možnosti příkazu catdb. |
remove |
Odebere podpis ze souboru. Seznam možností podporovaných příkazem remove najdete v tématu odebrání možností příkazu. |
sign |
Digitálně podepisuje soubory. Digitální podpisy chrání soubory před manipulací a umožňují uživatelům ověřovat podepisující osoby na základě podpisového certifikátu. Seznam možností podporovaných příkazem sign najdete v tématu možnosti příkazu podepsat. |
timestamp |
Soubory časových razítek. Seznam možností podporovaných příkazem timestamp najdete v tématu možnosti příkazu časového razítka. |
verify |
Ověřuje digitální podpis souborů. Určuje, zda byl podpisový certifikát vydán důvěryhodnou autoritou, zda byl podpisový certifikát odvolán, a volitelně zda podpisový certifikát je platný pro konkrétní zásadu. Seznam možností podporovaných příkazem verify najdete v tématu ověření možností příkazu. |
Následující možnosti platí pro všechny příkazy SignTool:
Globální možnost | Popis |
---|---|
/q |
Pokud se příkaz úspěšně spustí, nezobrazí žádný výstup a zobrazí minimální výstup, pokud příkaz selže. |
/v |
Zobrazí podrobný výstup bez ohledu na to, jestli se příkaz úspěšně spustí nebo selže, a zobrazí zprávy s upozorněním. |
/debug |
Zobrazí informace o ladění. |
Možnosti příkazu Catdb
Následující tabulka uvádí možnosti, které lze použít s příkazem catdb
:
Možnost Catdb | Popis |
---|---|
/d |
Určuje, že je aktualizována výchozí databáze katalogu. Pokud nepoužíváte /d nebo /g , nástroj SignTool aktualizuje systémovou komponentu a databázi ovladačů. |
guid /g |
Určuje, že se aktualizuje databáze katalogu identifikovaná identifikátorem GUID. |
/r |
Odebere zadaný katalog z databáze katalogu. Pokud tato možnost není zadaná, Nástroj SignTool přidá zadaný katalog do databáze katalogu. |
/u |
Určuje, že se pro přidané soubory katalogu automaticky vygeneruje jedinečný název. V případě potřeby se soubory katalogu přejmenují, aby se zabránilo konfliktům názvů s existujícími soubory katalogu. Pokud tato možnost není zadaná, Aplikace SignTool přepíše všechny existující katalogy, které mají stejný název jako zadaný katalog. |
Poznámka
Databáze katalogu se používají pro automatické vyhledávání souborů katalogu.
Odebrání možností příkazu
Následující tabulka uvádí možnosti, které lze použít s příkazem remove
:
Možnost Odebrat | Popis |
---|---|
/c |
Odeberte všechny certifikáty s výjimkou certifikátu podepisující osoby z podpisu. |
/q |
Žádný výstup o úspěchu a minimálním výstupu při selhání. Funkce SignTool jako vždy vrací 0 o úspěchu a 1 při selhání. |
/s |
Celý podpis odeberte. |
/u |
Odeberte neověřené atributy z podpisu, například duální podpisy a časové razítko. |
/v |
Vytiskněte podrobné zprávy o úspěchu a stavu. To může také o něco více informací o chybě. |
Možnosti příkazu podepsat
Následující tabulka uvádí možnosti, které lze použít s příkazem sign
:
Možnost příkazu Podepsat | Popis |
---|---|
/a |
Automaticky vybere nejlepší podpisový certifikát. SignTool najde všechny platné certifikáty, které splňují všechny zadané podmínky, a vybere ten, který je platný po nejdelší dobu. Pokud tato možnost není k dispozici, SignTool očekává, že najde jenom jeden platný podpisový certifikát. |
souboru /ac |
Přidá do bloku podpisu další certifikát ze souboru . |
/as |
Připojí tento podpis. Pokud neexistuje žádný primární podpis, tento podpis se místo toho vytvoří jako primární. |
/c
CertTemplateName |
Určuje název šablony certifikátu (rozšíření Microsoftu) pro podpisový certifikát. |
/csp
CSPName |
Určuje zprostředkovatele kryptografických služeb (CSP), který obsahuje kontejner privátního klíče. |
/d
desc |
Určuje popis podepsaného obsahu. |
cesty /dg |
Vygeneruje hodnotu hash, která se má podepsat, a soubory PKCS7 bez znaménka. Výstupní soubory digest a PKCS7 jsou <Cesta>\<Název_souboru>.dig a <Cesta>\<Název_souboru>.p7u. K výstupu extra souboru XML použijte /dxml . |
cesty /di |
Vytvoří podpis tak, že ingestuje podepsanou hodnotu hash do souboru PKCS7 bez znaménka. Vstupní podepsané soubory hash a nepodepsané soubory PKCS7 by měly být <Cesta>\<Název_souboru>.dig.signed a <Cesta>\<Název_souboru>.p7u. |
knihovny DLL /dlib |
Určuje knihovnu DLL, která implementuje funkci AuthenticodeDigestSign pro podepsání hodnoty hash. Tato možnost je ekvivalentní použití nástroje SignTool samostatně s možnostmi /dg , /ds a /di . Tato možnost vyvolá všechny tři jako jednu atomické operace. |
názvu souboru /dmdf |
Při použití s možností /dg předá obsah souboru funkci AuthenticodeDigestSign beze změny. |
/ds |
Podepíše pouze digest. Vstupní soubor by měl být hodnotou hash vygenerovanou možností /dg . Výstupní soubor je: <soubor>.signed. |
adresy URL /du |
Určuje uniform Resource Locator (URL) pro rozbalený popis podepsaného obsahu. |
/dxml |
Při použití s možností /dg vytvoří soubor XML. Výstupní soubor je: <Cesta>\<FileName>.dig.xml. |
/f
SignCertFile |
Určuje podpisový certifikát v souboru. Pokud je soubor ve formátu PFX (Personal Information Exchange) a chráněný heslem, použijte k zadání hesla možnost /p . Pokud soubor neobsahuje privátní klíče, pomocí možností /csp a /kc zadejte název kontejneru CSP a privátního klíče. |
/fd
|
Určuje algoritmus hash souboru, který se má použít k vytváření podpisů souborů.
Poznámka: Pokud není při podepisování zadána možnost /fd , příkaz vygeneruje chybu. |
/fd certHash |
Zadání řetězce certHash způsobí, že příkaz použije algoritmus zadaný v podpisovém certifikátu.
Poznámka: Pokud není při podepisování zadána možnost /fd , příkaz vygeneruje chybu. |
/i
IssuerName |
Určuje název vystavitele podpisového certifikátu. Tato hodnota může být podřetěr celého názvu vystavitele. |
/kc
PrivKeyContainerName |
Určuje název kontejneru privátního klíče. |
/n
subjectname |
Určuje název předmětu podpisového certifikátu. Tato hodnota může být podřetěscem celého názvu subjektu. |
/nph |
Pokud je to podporováno, potlačí hodnoty hash stránek pro spustitelné soubory. Výchozí hodnota je určena proměnnou prostředí SIGNTOOL_PAGE_HASHES a verzí wintrust.dll. Tato možnost se ignoruje u souborů, které nejsou v prostředí PE. |
hesla /p |
Určuje heslo, které se má použít při otevírání souboru PFX. K zadání souboru PFX použijte možnost /f . |
cesty /p7 |
Určuje, že soubor PKCS (Public Key Cryptography Standards) #7 se vytvoří pro každý zadaný soubor obsahu. Soubory PKCS č. 7 mají název <cesta>\<název souboru>.p7. |
/p7ce
hodnota |
Určuje možnosti pro podepsaný obsah PKCS #7. Nastavte Hodnotu tak, aby se Embedded vložil podepsaný obsah do souboru PKCS #7 nebo aby se DetachedSignedData vytvořila část podepsaných dat odpojeného souboru PKCS #7. Pokud není zadaná možnost /p7ce , podepsaný obsah se ve výchozím nastavení vloží. |
/p7co
<OID> |
Určuje identifikátor objektu (OID), který identifikuje podepsaný obsah PKCS #7. |
/ph |
V případě podpory vygeneruje hodnoty hash stránek pro spustitelné soubory. |
/r
RootSubjectName |
Určuje název subjektu kořenového certifikátu, ke kterému musí podpisový certifikát řetězit. Tato hodnota může být podřetěděným názvem celého subjektu kořenového certifikátu. |
/s
StoreName |
Určuje úložiště, které se má otevřít, když příkaz vyhledá certifikát. Pokud tato možnost není zadaná, příkaz otevře My úložiště. |
/sha1
hash |
Určuje hodnotu hash SHA1 podpisového certifikátu. Hodnota hash SHA1 se běžně používá, když více certifikátů splňuje kritéria zadaná zbývajícími možnostmi. |
/sm |
Určuje, že příkaz používá úložiště počítačů místo úložiště uživatele. |
adresy URL /t |
Určuje adresu URL serveru s časovým razítkem. Pokud tato možnost nebo /tr není zadána, podepsaný soubor není časový razítko. Pokud se časové razítko nezdaří, příkaz vygeneruje upozornění. Tuto možnost nelze použít s možností /tr . |
/td
|
Používá se s možností /tr vyžádat algoritmus digest používaný serverem časového razítka RFC 3161.
Poznámka: Pokud /td není během časového razítka zadáno, příkaz vygeneruje chybu. |
adresy URL /tr |
Určuje adresu URL serveru časového razítka RFC 3161. Pokud tato možnost nebo /t není zadána, podepsaný soubor není časový razítko. Pokud časové razítko selže, příkaz vygeneruje upozornění. Tuto možnost nelze použít s možností /t . |
využití /u |
Určuje použití rozšířeného klíče (EKU), které musí být přítomné v podpisovém certifikátu. Hodnotu využití může zadat identifikátor OID nebo řetězec. Výchozí využití je Code Signing nebo 1.3.6.1.5.5.7.3.3 . |
/uw |
Určuje použití Windows System Component Verification nebo 1.3.6.1.4.1.311.10.3.6 . |
Příklady použití najdete v tématu Použití nástroje SignTool k podepsánísouboru .
Možnosti příkazu časového razítka
Následující tabulka uvádí možnosti, které lze použít s příkazem timestamp
:
Možnost časového razítka | Popis |
---|---|
/p7 |
Časové razítko souborů PKCS #7 |
adresy URL /t |
Určuje adresu URL serveru s časovým razítkem. Soubor, který je opatřen časovým razítkem, musí být podepsán dříve. Je vyžadována možnost /t nebo /tr . |
/td
|
Používá se s možností /tr vyžádat algoritmus digest používaný serverem časového razítka RFC 3161.
Poznámka: Pokud /td není během časového razítka zadáno, příkaz vygeneruje upozornění. |
indexu /tp |
Časové razítko podpisu v indexu . |
adresy URL /tr |
Určuje adresu URL serveru časového razítka RFC 3161. Soubor, který je opatřen časovým razítkem, musí být podepsán dříve. Je vyžadována možnost /tr nebo /t . |
Ověření možností příkazu
Následující tabulka uvádí možnosti, které lze použít s příkazem verify
:
Možnost Ověřit | Popis |
---|---|
/a |
Určuje, že všechny metody lze použít k ověření souboru. Nejdříve SignTool vyhledá databáze katalogu a určí, jestli je soubor přihlášený do katalogu. Pokud soubor není přihlášený k žádnému katalogu, Nástroj SignTool se pokusí ověřit vložený podpis souboru. Tuto možnost doporučujeme při ověřování souborů, které můžou nebo nemusí být přihlášené v katalogu. Příklady souborů, které můžou nebo nemusí být podepsané, zahrnují soubory nebo ovladače systému Windows. |
/ad |
Vyhledá katalog pomocí výchozí databáze katalogu. |
/all |
Ověřuje všechny podpisy v souboru s více podpisy. |
/as |
Vyhledá katalog pomocí databáze katalogu systémové komponenty (ovladače). |
/ag
CatDBGUID |
Vyhledá katalog v databázi katalogu identifikované identifikátorem GUID. |
/c
CatFile |
Určuje soubor katalogu podle názvu. |
/d |
Vytiskne adresu URL popisu a popisu. Windows Vista a starší: Tato možnost není podporovaná. |
indexu /ds |
Ověří podpis na určité pozici. |
/hash {SHA1|SHA256} |
Určuje volitelný hashovací algoritmus, který se má použít při hledání souboru v katalogu. |
/kp |
Provede ověření pomocí zásad podepisování ovladačů v režimu jádra x64. |
/ms |
Používá více sémantiky ověřování. Toto chování je výchozí volání WinVerifyTrust. |
verze /o |
Ověří soubor podle verze operačního systému. Parametr verze je ve formátu: <PlatformID>:<VerMajor>.<VerMinor>.<BuildNumber>. Doporučujeme použít možnost /o . Pokud není zadaný /o , nástroj SignTool může vrátit neočekávané výsledky. Pokud například nezahrnete /o , pak systémové katalogy, které se správně ověřují ve starším operačním systému, nemusí být v novějším operačním systému správně ověřeny. |
/p7 |
Ověřuje soubory PKCS #7. Pro ověřování PKCS #7 se nepoužívají žádné existující zásady. SignTool zkontroluje podpis a vytvoří řetěz podpisového certifikátu. |
/pa |
Určuje, že se používají výchozí zásady ověřování ověřování. Pokud není zadána možnost /pa , signTool použije zásadu ověření ovladače systému Windows. Tuto možnost nelze použít s možnostmi catdb . |
/pg
PolicyGUID |
Určuje zásadu ověření podle identifikátoru GUID. Identifikátor GUID odpovídá ActionID zásady ověřování. Tuto možnost nelze použít s možnostmi catdb . |
/ph |
Vytiskněte a ověřte hodnoty hash stránky. Windows Vista a starší: Tato možnost není podporovaná. |
/r
RootSubjectName |
Určuje název subjektu kořenového certifikátu, ke kterému musí podpisový certifikát řetězit. Tato hodnota může být podřetěděným názvem celého subjektu kořenového certifikátu. |
/tw |
Určuje, že příkaz vygeneruje upozornění, pokud podpis není časový razítko. |
Příkaz SignTool verify
určuje, jestli byl podpisový certifikát vydán důvěryhodnou autoritou, jestli byl podpisový certifikát odvolán, a volitelně, jestli je podpisový certifikát platný pro konkrétní zásadu.
Příkaz SignTool verify
vypíše stav vloženého podpisu, pokud není zadána možnost vyhledávání v katalogu, například /a
, /ad
, /as
, /ag
nebo /c
.
Návratová hodnota
SignTool při ukončení vrátí jeden z následujících ukončovací kód:
Ukončovací kód | Popis |
---|---|
0 |
Spuštění proběhlo úspěšně. |
1 |
Spuštění se nezdařilo. |
2 |
Provádění se dokončilo s upozorněními. |
Příklady
Následující příkaz přidá soubor katalogu MyCatalogFileName.cat do systémové komponenty a databáze ovladačů. Možnost /u
vygeneruje jedinečný název v případě potřeby, aby se zabránilo nahrazení existujícího souboru katalogu s názvem MyCatalogFileName.cat.
signtool catdb /v /u MyCatalogFileName.cat
Následující příkaz podepíše soubor automaticky pomocí nejlepšího certifikátu.
signtool sign /a /fd SHA256 MyFile.exe
Následující příkaz digitálně podepíše soubor pomocí certifikátu uloženého v souboru PFX chráněném heslem.
signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe
Následující příkaz digitálně podepíše soubor a časové razítko. Certifikát použitý k podepsání souboru je uložený v souboru PFX.
signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe
Následující příkaz podepíše soubor pomocí certifikátu umístěného v úložišti My
s názvem subjektu My Company Certificate
.
signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe
Následující příkaz podepíše ovládací prvek ActiveX a zobrazí informace, které se zobrazí v prohlížeči, když se uživateli zobrazí výzva k instalaci ovládacího prvku.
signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe
Následující příkaz označí časové razítko souboru, který už byl digitálně podepsaný.
signtool timestamp /t http://timestamp.digicert.com MyFile.exe
Následující příkaz označí soubor pomocí serveru časového razítka RFC 3161.
signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe
Následující příkaz ověří, jestli je soubor podepsaný.
signtool verify MyFile.exe
Následující příkaz ověří systémový soubor, který lze podepsat v katalogu.
signtool verify /a SystemFile.dll
Následující příkaz ověří systémový soubor, který je přihlášený do katalogu s názvem MyCatalog.cat
.
signtool verify /c MyCatalog.cat SystemFile.dll
Následující příkaz zcela odebere podpis ze souboru.
signtool remove /s MyFile.exe
Viz také
podepsání souboru pomocí nástroje SignTool