SignTool
SignTool är ett kommandoradsverktyg som signerar filer digitalt, verifierar signaturerna i filer, tar bort signaturer från filer och tidsstämplar. Information om varför det är viktigt att signera filer finns i Introduktion till kodsignering.
SignTool är tillgängligt som en del av Windows Software Development Kit (SDK). Verktyget installeras i mappen \Bin
i Windows SDK-installationssökvägen, till exempel: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
.
Not
Windows SDK, Windows Hardware Lab Kit (HLK), Windows Driver Kit (WDK)och Windows Assessment and Deployment Kit (ADK) builds 20236 och senare kräver att du anger den sammanfattade algoritmen. Kommandot SignTool sign
kräver alternativet algoritm för filsammandrag (/fd
) och algoritmalternativet för tidsstämpelsammandrag (/td
) under signering respektive tidsstämpling.
Om /fd
inte anges under signeringen och om /td
inte anges under tidsstämplingen utlöser kommandot en varning, felkod 0, inledningsvis. I senare versioner av SignTool blir varningen ett fel. Vi rekommenderar SHA256. Det anses vara säkrare än SHA1 av branschen.
Syntax
signtool [command] [options] [file_name | ...]
Parametrar
Argument | Beskrivning |
---|---|
command |
Ett av fyra kommandon som anger en åtgärd som ska utföras på en fil: catdb , sign , timestamp eller verify . En beskrivning av varje kommando finns i nästa tabell. |
options |
Ett alternativ som ändrar ett kommando. Förutom alternativen global /q och /v har varje kommando stöd för en unik uppsättning alternativ. |
file_name |
Sökvägen till filen som ska signeras. |
SignTool stöder följande kommandon:
Befallning | Beskrivning |
---|---|
catdb |
Lägger till en katalogfil i eller tar bort den från en katalogdatabas. Katalogdatabaser används för automatisk sökning av katalogfiler och identifieras av GUID. En lista över de alternativ som stöds av kommandot catdb finns i catdb-kommandoalternativ. |
remove |
Tar bort en signatur från en fil. En lista över de alternativ som stöds av kommandot remove finns i ta bort kommandoalternativ. |
sign |
Signerar filer digitalt. Digitala signaturer skyddar filer från manipulering och gör det möjligt för användare att verifiera undertecknaren baserat på ett signeringscertifikat. En lista över de alternativ som stöds av kommandot sign finns i signera kommandoalternativ. |
timestamp |
Tidsstämplar filer. En lista över de alternativ som stöds av kommandot timestamp finns i tidsstämpelkommandoalternativ. |
verify |
Verifierar den digitala signaturen för filer. Avgör om signeringscertifikatet har utfärdats av en betrodd utfärdare, om signeringscertifikatet har återkallats och eventuellt om signeringscertifikatet är giltigt för en viss princip. En lista över de alternativ som stöds av kommandot verify finns i verifiera kommandoalternativen. |
Följande alternativ gäller för alla SignTool-kommandon:
Globalt alternativ | Beskrivning |
---|---|
/q |
Visar inga utdata om kommandot körs och visar minimala utdata om kommandot misslyckas. |
/v |
Visar utförliga utdata oavsett om kommandot körs eller misslyckas och visar varningsmeddelanden. |
/debug |
Visar felsökningsinformation. |
Catdb-kommandoalternativ
I följande tabell visas de alternativ som kan användas med kommandot catdb
:
Catdb-alternativ | Beskrivning |
---|---|
/d |
Anger att standardkatalogdatabasen uppdateras. Om du inte använder /d eller /g uppdaterar SignTool systemkomponenten och drivrutinsdatabasen. |
/g
GUID- |
Anger att katalogdatabasen som identifieras av GUID uppdateras. |
/r |
Tar bort den angivna katalogen från katalogdatabasen. Om det här alternativet inte har angetts lägger SignTool till den angivna katalogen i katalogdatabasen. |
/u |
Anger att ett unikt namn genereras automatiskt för de tillagda katalogfilerna. Om det behövs byter katalogfilerna namn för att förhindra namnkonflikter med befintliga katalogfiler. Om det här alternativet inte anges skriver SignTool över alla befintliga kataloger som har samma namn som den angivna katalogen. |
Not
Katalogdatabaser används för automatisk sökning av katalogfiler.
Ta bort kommandoalternativ
I följande tabell visas de alternativ som kan användas med kommandot remove
:
Alternativet Ta bort | Beskrivning |
---|---|
/c |
Ta bort alla certifikat, förutom signeringscertifikatet från signaturen. |
/q |
Inga utdata vid lyckade och minimala utdata vid fel. Som alltid returnerar SignTool 0 om lyckade och 1 vid fel. |
/s |
Ta bort signaturen helt. |
/u |
Ta bort de oautentiserade attributen från signaturen, t.ex. dubbla signaturer och tidsstämplar. |
/v |
Skriv ut utförliga lyckade och statusmeddelanden. Detta kan också ge lite mer information om fel. |
Kommandoalternativ för tecken
I följande tabell visas de alternativ som kan användas med kommandot sign
:
Kommandoalternativet Signera | Beskrivning |
---|---|
/a |
Väljer automatiskt det bästa signeringscertifikatet. SignTool hittar alla giltiga certifikat som uppfyller alla angivna villkor och väljer det som är giltigt under den längsta tiden. Om det här alternativet inte finns förväntar sig SignTool att endast hitta ett giltigt signeringscertifikat. |
/ac
fil |
Lägger till ett annat certifikat från fil till signaturblocket. |
/as |
Lägger till signaturen. Om det inte finns någon primär signatur görs den här signaturen till den primära signaturen i stället. |
/c
CertTemplateName |
Anger certifikatmallens namn (ett Microsoft-tillägg) för signeringscertifikatet. |
/csp
CSPName |
Anger den kryptografiska tjänstprovider (CSP) som innehåller containern för privat nyckel. |
/d
Desc |
Anger en beskrivning av det signerade innehållet. |
/dg
Sökväg |
Genererar sammanfattningen som ska signeras och de osignerade PKCS7-filerna. Utdatasammandragsfilerna och PKCS7-filerna är <Path>\<FileName>.dig och <Path>\<FileName>.p7u. Om du vill mata ut en extra XML-fil använder du /dxml . |
/di
Sökväg |
Skapar signaturen genom att mata in den signerade sammandraget till den osignerade PKCS7-filen. Indatasignerade och osignerade PKCS7-filer ska vara <Path>\<FileName>.dig.signed och <Path>\<FileName>.p7u. |
/dlib
DLL- |
Anger den DLL som implementerar funktionen AuthenticodeDigestSign att signera sammandraget med. Det här alternativet motsvarar att använda SignTool separat med alternativen /dg , /ds och /di . Det här alternativet anropar alla tre som en atomisk åtgärd. |
/dmdf
Filnamn |
När det används med alternativet /dg skickar du filens innehåll till funktionen AuthenticodeDigestSign utan ändringar. |
/ds |
Signerar endast sammandraget. Indatafilen ska vara den sammandrag som genereras av alternativet /dg . Utdatafilen är: <File>.signed. |
/du
URL- |
Anger en url (Uniform Resource Locator) för den utökade beskrivningen av det signerade innehållet. |
/dxml |
När det används med alternativet /dg skapar du en XML-fil. Utdatafilen är: <Path>\<FileName>.dig.xml. |
/f
SignCertFile |
Anger signeringscertifikatet i en fil. Om filen är i PFX-format (Personal Information Exchange) och skyddas av ett lösenord använder du alternativet /p för att ange lösenordet. Om filen inte innehåller privata nycklar använder du alternativen /csp och /kc för att ange containernamnet csp och privat nyckel. |
/fd
alg |
Anger den algoritm för filsammandrag som ska användas för att skapa filsignaturer.
Obs: Om alternativet /fd inte anges under signeringen genererar kommandot ett fel. |
/fd certHash |
Om du anger strängen "certHash" används den algoritm som anges i signeringscertifikatet.
Obs: Om alternativet /fd inte anges under signeringen genererar kommandot ett fel. |
/i
IssuerName |
Anger namnet på utfärdaren av signeringscertifikatet. Det här värdet kan vara en delsträng av hela utfärdarnamnet. |
/kc
PrivKeyContainerName |
Anger containernamnet för den privata nyckeln. |
/n
SubjectName |
Anger namnet på ämnet för signeringscertifikatet. Det här värdet kan vara en delsträng av hela ämnesnamnet. |
/nph |
Om det stöds undertrycks sidhashvärden för körbara filer. Standardvärdet bestäms av miljövariabeln SIGNTOOL_PAGE_HASHES och av wintrust.dll version. Det här alternativet ignoreras för icke-PE-filer. |
/p
lösenord |
Anger lösenordet som ska användas när du öppnar en PFX-fil. Använd alternativet /f för att ange en PFX-fil. |
/p7
Sökväg |
Anger att en PKCS-fil (Public Key Cryptography Standards) #7 skapas för varje angiven innehållsfil. PKCS #7-filer heter <sökväg>\<filnamn>.p7. |
/p7ce
Värde |
Anger alternativ för det signerade PKCS #7-innehållet. Ange Value till Embedded för att bädda in det signerade innehållet i PKCS #7-filen eller för att DetachedSignedData för att skapa den signerade datadelen av en frånkopplad PKCS #7-fil. Om alternativet /p7ce inte anges bäddas det signerade innehållet in som standard. |
/p7co
<OID-> |
Anger den objektidentifierare (OID) som identifierar det signerade PKCS #7-innehållet. |
/ph |
Om det stöds genererar sidan hashvärden för körbara filer. |
/r
RootSubjectName |
Anger namnet på ämnet för rotcertifikatet som signeringscertifikatet måste länka till. Det här värdet kan vara en delsträng av hela ämnesnamnet för rotcertifikatet. |
/s
StoreName |
Anger vilket arkiv som ska öppnas när kommandot söker efter certifikatet. Om det här alternativet inte har angetts öppnar kommandot My store. |
/sha1
Hash |
Anger SHA1-hashen för signeringscertifikatet. SHA1-hashen används ofta när flera certifikat uppfyller de kriterier som anges av de återstående alternativen. |
/sm |
Anger att kommandot använder ett datorarkiv i stället för ett användararkiv. |
/t
URL- |
Anger URL:en för tidsstämpelservern. Om det här alternativet eller /tr inte har angetts är den signerade filen inte tidsstämplad. Om tidsstämpling misslyckas genererar kommandot en varning. Det här alternativet kan inte användas med alternativet /tr . |
/td
alg |
Används med alternativet /tr för att begära en sammandragsalgoritm som används av RFC 3161-tidsstämpelservern.
Obs: Om /td inte anges vid tidsstämpling genererar kommandot ett fel. |
/tr
URL- |
Anger URL:en för RFC 3161-tidsstämpelservern. Om det här alternativet eller /t inte har angetts är den signerade filen inte tidsstämplad. Om tidsstämplingen misslyckas genererar kommandot en varning. Det här alternativet kan inte användas med alternativet /t . |
/u
Användning |
Anger den förbättrade nyckelanvändningen (EKU) som måste finnas i signeringscertifikatet. Användningsvärdet kan anges med OID eller sträng. Standardanvändningen är Code Signing eller 1.3.6.1.5.5.7.3.3 . |
/uw |
Anger användningen av Windows System Component Verification eller 1.3.6.1.4.1.311.10.3.6 . |
Användningsexempel finns i Använda SignTool för att signera en fil.
Kommandoalternativ för tidsstämpel
I följande tabell visas de alternativ som kan användas med kommandot timestamp
:
Tidsstämpelalternativ | Beskrivning |
---|---|
/p7 |
Tidsstämplar PKCS #7-filer. |
/t
URL- |
Anger URL:en för tidsstämpelservern. Filen som tidsstämplas måste ha signerats tidigare. Antingen krävs alternativet /t eller /tr . |
/td
alg |
Används med alternativet /tr för att begära en sammandragsalgoritm som används av RFC 3161-tidsstämpelservern.
Obs: Om /td inte anges vid tidsstämpling genererar kommandot en varning. |
/tp
index |
Tid stämplar signaturen vid index. |
/tr
URL- |
Anger URL:en för RFC 3161-tidsstämpelservern. Filen som tidsstämplas måste ha signerats tidigare. Antingen krävs alternativet /tr eller /t . |
Verifiera kommandoalternativ
I följande tabell visas de alternativ som kan användas med kommandot verify
:
Alternativet Verifiera | Beskrivning |
---|---|
/a |
Anger att alla metoder kan användas för att verifiera filen. Först söker SignTool igenom katalogdatabaserna för att avgöra om filen är inloggad i en katalog. Om filen inte är inloggad i någon katalog försöker SignTool verifiera filens inbäddade signatur. Vi rekommenderar det här alternativet när du verifierar filer som kanske eller kanske inte är inloggade i en katalog. Exempel på filer som kanske eller kanske inte är signerade är Windows-filer eller -drivrutiner. |
/ad |
Söker efter katalogen med hjälp av standardkatalogdatabasen. |
/all |
Verifierar alla signaturer i en fil med flera signaturer. |
/as |
Söker efter katalogen med hjälp av katalogdatabasen för systemkomponenten (drivrutinen). |
/ag
CatDBGUID |
Hittar katalogen i katalogdatabasen som identifieras av GUID. |
/c
CatFile |
Anger katalogfilen efter namn. |
/d |
Skriver ut beskrivnings- och beskrivnings-URL:en. Windows Vista och tidigare: Det här alternativet stöds inte. |
/ds
Index |
Verifierar signaturen vid en viss position. |
/hash {SHA1|SHA256} |
Anger en valfri hash-algoritm som ska användas när du söker efter en fil i en katalog. |
/kp |
Utför verifieringen med hjälp av principen för X64-drivrutinssignering i kernelläge. |
/ms |
Använder flera verifieringssemantik. Det här beteendet är standardvärdet för ett WinVerifyTrust--anrop. |
/o
version |
Verifierar filen efter operativsystemversion. Versionsparametern är av formatet: <PlatformID>:<VerMajor>.<VerMinor>.<BuildNumber>. Vi rekommenderar att du använder alternativet /o . Om /o inte har angetts kan SignTool returnera oväntade resultat. Om du till exempel inte inkluderar /o kanske systemkataloger som verifierar korrekt på ett äldre operativsystem inte verifieras korrekt på ett nyare operativsystem. |
/p7 |
Verifierar PKCS #7-filer. Inga befintliga principer används för PKCS #7-validering. SignTool kontrollerar signaturen och skapar en kedja för signeringscertifikatet. |
/pa |
Anger att standardprincipen för autentiseringsverifiering används. Om alternativet /pa inte har angetts använder SignTool windows-drivrutinsverifieringsprincipen. Det här alternativet kan inte användas med catdb alternativ. |
/pg
PolicyGUID |
Anger en verifieringsprincip efter GUID. GUID motsvarar verifieringsprincipens ActionID . Det här alternativet kan inte användas med catdb alternativ. |
/ph |
Skriv ut och verifiera sidhashvärden. Windows Vista och tidigare: Det här alternativet stöds inte. |
/r
RootSubjectName |
Anger namnet på ämnet för rotcertifikatet som signeringscertifikatet måste länka till. Det här värdet kan vara en delsträng av hela ämnesnamnet för rotcertifikatet. |
/tw |
Anger att kommandot genererar en varning om signaturen inte är tidsstämplad. |
Kommandot SignTool verify
avgör om signeringscertifikatet har utfärdats av en betrodd utfärdare, om signeringscertifikatet har återkallats och eventuellt om signeringscertifikatet är giltigt för en viss princip.
Kommandot SignTool verify
matar ut den inbäddade signaturstatusen såvida inte ett alternativ har angetts för att söka i en katalog, till exempel /a
, /ad
, /as
, /ag
eller /c
.
Returvärde
SignTool returnerar någon av följande slutkoder när den avslutas:
Slutkod | Beskrivning |
---|---|
0 |
Körningen lyckades. |
1 |
Körningen misslyckades. |
2 |
Körningen har slutförts med varningar. |
Exempel
Följande kommando lägger till katalogfilen MyCatalogFileName.cat till systemkomponenten och drivrutinsdatabasen. Alternativet /u
genererar ett unikt namn om det behövs för att förhindra att en befintlig katalogfil med namnet MyCatalogFileName.catersätts.
signtool catdb /v /u MyCatalogFileName.cat
Följande kommando signerar en fil automatiskt med hjälp av det bästa certifikatet.
signtool sign /a /fd SHA256 MyFile.exe
Följande kommando signerar en fil digitalt med hjälp av ett certifikat som lagras i en lösenordsskyddad PFX-fil.
signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe
Följande kommando signerar och tidsstämplar en fil digitalt. Certifikatet som används för att signera filen lagras i en PFX-fil.
signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe
Följande kommando signerar en fil med hjälp av ett certifikat som finns i det My
arkivet som har ämnesnamnet My Company Certificate
.
signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe
Följande kommando signerar en ActiveX-kontroll och innehåller information som visas i en webbläsare när användaren uppmanas att installera kontrollen.
signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe
Följande kommandotid stämplar en fil som redan har signerats digitalt.
signtool timestamp /t http://timestamp.digicert.com MyFile.exe
Följande kommandotid stämplar en fil med hjälp av en RFC 3161-tidsstämpelserver.
signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe
Följande kommando verifierar att en fil har signerats.
signtool verify MyFile.exe
Följande kommando verifierar en systemfil som kan loggas in i en katalog.
signtool verify /a SystemFile.dll
Följande kommando verifierar en systemfil som är inloggad i en katalog med namnet MyCatalog.cat
.
signtool verify /c MyCatalog.cat SystemFile.dll
Följande kommando tar bort signaturen helt från en fil.
signtool remove /s MyFile.exe