Sdílet prostřednictvím


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, timestampnebo 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, /dsa /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, /agnebo /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

Úvod do podepisování kódu