SignTool
SignTool is een opdrachtregelprogramma dat bestanden digitaal ondertekent, de handtekeningen in bestanden verifieert, de handtekeningen verwijdert uit bestanden en tijdstempelbestanden. Zie Inleiding tot ondertekening vancode voor informatie over waarom ondertekeningsbestanden belangrijk zijn.
SignTool is beschikbaar als onderdeel van de Windows Software Development Kit (SDK). Het hulpprogramma wordt geïnstalleerd in de map \Bin
van het installatiepad van de Windows SDK, bijvoorbeeld: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
.
Notitie
De Windows SDK, Windows Hardware Lab Kit (HLK), Windows Driver Kit (WDK)en Windows Assessment and Deployment Kit (ADK) builds 20236 en hoger vereisen dat u het digest-algoritme opgeeft. Voor de opdracht SignTool sign
is de optie bestandssamenvattalgoritme (/fd
) en de optie voor het tijdstempelalgoritme (/td
) vereist tijdens respectievelijk ondertekening en tijdstempels.
Als /fd
niet is opgegeven tijdens het ondertekenen en als /td
niet is opgegeven tijdens het tijdstempel, genereert de opdracht in eerste instantie een waarschuwing, foutcode 0. In latere versies van SignTool wordt de waarschuwing een fout. We raden SHA256 aan. Het wordt beschouwd als veiliger dan SHA1 door de branche.
Syntaxis
signtool [command] [options] [file_name | ...]
Parameters
Argument | Beschrijving |
---|---|
command |
Een van de vier opdrachten waarmee een bewerking wordt opgegeven die moet worden uitgevoerd op een bestand: catdb , sign , timestamp of verify . Zie de volgende tabel voor een beschrijving van elke opdracht. |
options |
Een optie waarmee een opdracht wordt gewijzigd. Naast de algemene /q - en /v -opties biedt elke opdracht ondersteuning voor een unieke set opties. |
file_name |
Het pad naar het bestand dat moet worden ondertekend. |
SignTool ondersteunt de volgende opdrachten:
Bevelen | Beschrijving |
---|---|
catdb |
Hiermee voegt u een catalogusbestand toe aan of verwijdert u het uit een catalogusdatabase. Catalogusdatabases worden gebruikt voor het automatisch opzoeken van catalogusbestanden en worden geïdentificeerd door GUID. Zie catdb-opdrachtoptiesvoor een lijst met opties die door de catdb opdracht worden ondersteund. |
remove |
Hiermee verwijdert u een handtekening uit een bestand. Zie opdrachtopties verwijderenvoor een lijst met opties die worden ondersteund door de opdracht remove . |
sign |
Bestanden digitaal tekenen. Met digitale handtekeningen worden bestanden beschermd tegen manipulatie en kunnen gebruikers de ondertekenaar verifiëren op basis van een handtekeningcertificaat. Zie opdrachtoptiesvoor een lijst met opties die worden ondersteund door de opdracht sign sign . |
timestamp |
Tijdstempelbestanden. Zie opdrachtopties voor tijdstempelsvoor een lijst met opties die worden ondersteund door de opdracht timestamp . |
verify |
Controleert de digitale handtekening van bestanden. Bepaalt of het handtekeningcertificaat is uitgegeven door een vertrouwde instantie, of het handtekeningcertificaat is ingetrokken en, optioneel, of het handtekeningcertificaat geldig is voor een specifiek beleid. Zie opdrachtopties controlerenvoor een lijst met opties die worden ondersteund door de opdracht verify . |
De volgende opties zijn van toepassing op alle SignTool-opdrachten:
Globale optie | Beschrijving |
---|---|
/q |
Geeft geen uitvoer weer als de opdracht is uitgevoerd en geeft minimale uitvoer weer als de opdracht mislukt. |
/v |
Geeft uitgebreide uitvoer weer, ongeacht of de opdracht is uitgevoerd of mislukt, en geeft waarschuwingsberichten weer. |
/debug |
Geeft foutopsporingsinformatie weer. |
Opties voor catdb-opdrachten
De volgende tabel bevat de opties die kunnen worden gebruikt met de opdracht catdb
:
Catdb-optie | Beschrijving |
---|---|
/d |
Hiermee geeft u op dat de standaardcatalogusdatabase wordt bijgewerkt. Als u geen /d of /g gebruikt, werkt SignTool de systeemonderdeel- en stuurprogrammadatabase bij. |
/g
GUID- |
Hiermee geeft u op dat de catalogusdatabase die wordt geïdentificeerd door de GUID wordt bijgewerkt. |
/r |
Hiermee verwijdert u de opgegeven catalogus uit de catalogusdatabase. Als deze optie niet is opgegeven, voegt SignTool de opgegeven catalogus toe aan de catalogusdatabase. |
/u |
Hiermee geeft u op dat automatisch een unieke naam wordt gegenereerd voor de toegevoegde catalogusbestanden. Indien nodig worden de catalogusbestanden hernoemd om naamconflicten met bestaande catalogusbestanden te voorkomen. Als deze optie niet is opgegeven, overschrijft SignTool een bestaande catalogus met dezelfde naam als de opgegeven catalogus. |
Notitie
Catalogusdatabases worden gebruikt voor het automatisch opzoeken van catalogusbestanden.
Opdrachtopties verwijderen
De volgende tabel bevat de opties die kunnen worden gebruikt met de opdracht remove
:
Optie Verwijderen | Beschrijving |
---|---|
/c |
Verwijder alle certificaten, met uitzondering van het handtekeningcertificaat. |
/q |
Geen uitvoer bij succes en minimale uitvoer bij storing. Zoals altijd retourneert SignTool 0 bij succes en 1 bij fouten. |
/s |
Verwijder de handtekening volledig. |
/u |
Verwijder de niet-geverifieerde kenmerken uit de handtekening, bijvoorbeeld dubbele handtekeningen en tijdstempels. |
/v |
Uitgebreide geslaagde en statusberichten afdrukken. Dit kan ook iets meer informatie geven over fouten. |
Opties voor de opdracht Ondertekenen
De volgende tabel bevat de opties die kunnen worden gebruikt met de opdracht sign
:
Opdrachtoptie Ondertekenen | Beschrijving |
---|---|
/a |
Hiermee selecteert u automatisch het beste handtekeningcertificaat. SignTool vindt alle geldige certificaten die voldoen aan alle opgegeven voorwaarden en selecteert het certificaat dat het langst geldig is. Als deze optie niet aanwezig is, verwacht SignTool slechts één geldig handtekeningcertificaat te vinden. |
/ac
bestand |
Hiermee voegt u een ander certificaat uit bestand toe aan het handtekeningblok. |
/as |
Voegt deze handtekening toe. Als er geen primaire handtekening bestaat, wordt deze handtekening in plaats daarvan de primaire handtekening gemaakt. |
/c
CertTemplateName |
Hiermee geeft u de naam van het certificaatsjabloon (een Microsoft-extensie) voor het handtekeningcertificaat op. |
/csp
CSPName- |
Hiermee geeft u de cryptografische serviceprovider (CSP) op die de container met persoonlijke sleutels bevat. |
/d
Desc- |
Hiermee geeft u een beschrijving van de ondertekende inhoud. |
/dg
pad |
Hiermee wordt de samenvatting gegenereerd die moet worden ondertekend en de niet-ondertekende PKCS7-bestanden. De uitvoersamenvatings- en PKCS7-bestanden zijn <Path>\<FileName>.dig en <Path>\<FileName>.p7u. Als u een extra XML-bestand wilt uitvoeren, gebruikt u /dxml . |
/di
pad |
Hiermee maakt u de handtekening door de ondertekende samenvatting op te nemen in het niet-ondertekende PKCS7-bestand. De invoerondertekende digest- en niet-ondertekende PKCS7-bestanden moeten worden <Pad>\<FileName>.dig.signed en <Path>\<FileName>.p7u-. |
DLL-/dlib |
Hiermee geeft u het DLL-bestand waarmee de AuthenticodeDigestSign -functie wordt geïmplementeerd om de samenvatting te ondertekenen. Deze optie is gelijk aan het afzonderlijk gebruiken van SignTool met de opties /dg , /ds en /di . Met deze optie worden alle drie aangeroepen als één atomische bewerking. |
/dmdf
bestandsnaam |
Bij gebruik met de optie /dg geeft u de inhoud van het bestand door aan de functie AuthenticodeDigestSign zonder wijziging. |
/ds |
Tekent alleen de digest. Het invoerbestand moet de samenvatting zijn die wordt gegenereerd door de optie /dg . Het uitvoerbestand is: <Bestand>.signed. |
/du
URL- |
Hiermee geeft u een URL (Uniform Resource Locator) op voor de uitgebreide beschrijving van de ondertekende inhoud. |
/dxml |
Wanneer deze wordt gebruikt met de optie /dg , produceert u een XML-bestand. Het uitvoerbestand is: <Pad>\<FileName>.dig.xml. |
/f
SignCertFile- |
Hiermee geeft u het handtekeningcertificaat in een bestand. Als het bestand de PFX-indeling (Personal Information Exchange) heeft en is beveiligd met een wachtwoord, gebruikt u de optie /p om het wachtwoord op te geven. Als het bestand geen persoonlijke sleutels bevat, gebruikt u de /csp - en /kc -opties om de naam van de CSP- en persoonlijke sleutelcontainer op te geven. |
/fd
alg- |
Hiermee geeft u het algoritme voor bestandssamenvating op dat moet worden gebruikt voor het maken van bestandshandtekeningen.
Opmerking: als de optie /fd niet is opgegeven tijdens het ondertekenen, genereert de opdracht een fout. |
/fd certHash |
Als u de tekenreeks 'certHash' opgeeft, wordt het algoritme gebruikt dat is opgegeven op het handtekeningcertificaat.
Opmerking: als de optie /fd niet is opgegeven tijdens het ondertekenen, genereert de opdracht een fout. |
/i
IssuerName- |
Hiermee geeft u de naam van de uitgever van het handtekeningcertificaat. Deze waarde kan een subtekenreeks zijn van de volledige naam van de uitgever. |
/kc
PrivKeyContainerName- |
Hiermee geeft u de naam van de persoonlijke sleutelcontainer. |
/n
SubjectName- |
Hiermee geeft u de naam van het onderwerp van het handtekeningcertificaat. Deze waarde kan een subtekenreeks van de volledige onderwerpnaam zijn. |
/nph |
Indien ondersteund, onderdrukt u pagina-hashes voor uitvoerbare bestanden. De standaardwaarde wordt bepaald door de omgevingsvariabele SIGNTOOL_PAGE_HASHES en door de wintrust.dll versie. Deze optie wordt genegeerd voor niet-PE-bestanden. |
/p
wachtwoord |
Hiermee geeft u het wachtwoord op dat moet worden gebruikt bij het openen van een PFX-bestand. Gebruik de optie /f om een PFX-bestand op te geven. |
/p7
pad |
Hiermee geeft u op dat een PKCS-bestand (Public Key Cryptography Standards) #7 wordt geproduceerd voor elk opgegeven inhoudsbestand. PKCS #7-bestanden hebben de naam <pad>\<bestandsnaam>.p7. |
/p7ce
waarde |
Hiermee geeft u opties voor de ondertekende PKCS #7-inhoud. Stel waarde in op Embedded om de ondertekende inhoud in te sluiten in het PKCS #7-bestand of DetachedSignedData om het ondertekende gegevensgedeelte van een losgekoppeld PKCS #7-bestand te produceren. Als de /p7ce optie niet is opgegeven, wordt de ondertekende inhoud standaard ingesloten. |
/p7co
<OID-> |
Hiermee geeft u de object-id (OID) op die de ondertekende PKCS #7-inhoud identificeert. |
/ph |
Indien ondersteund, genereert u pagina-hashes voor uitvoerbare bestanden. |
/r
RootSubjectName |
Hiermee geeft u de naam op van het onderwerp van het basiscertificaat waarnaar het handtekeningcertificaat moet worden gekoppeld. Deze waarde kan een subtekenreeks zijn van de volledige onderwerpnaam van het basiscertificaat. |
/s
StoreName- |
Hiermee geeft u het archief te openen wanneer de opdracht zoekt naar het certificaat. Als deze optie niet is opgegeven, wordt met de opdracht het My archief geopend. |
/sha1
Hash- |
Hiermee geeft u de SHA1-hash van het handtekeningcertificaat. De SHA1-hash wordt vaak gebruikt wanneer meerdere certificaten voldoen aan de criteria die zijn opgegeven door de resterende opties. |
/sm |
Hiermee geeft u op dat de opdracht een computerarchief gebruikt in plaats van een gebruikersarchief. |
/t
URL- |
Hiermee geeft u de URL van de tijdstempelserver. Als deze optie of /tr niet is opgegeven, is het ondertekende bestand geen tijdstempel. Als tijdstempels mislukken, genereert de opdracht een waarschuwing. Deze optie kan niet worden gebruikt met de optie /tr . |
/td
alg- |
Wordt gebruikt met de /tr optie om een digest-algoritme aan te vragen dat wordt gebruikt door de RFC 3161-tijdstempelserver.
Opmerking: als /td niet is opgegeven tijdens het tijdstempel, genereert de opdracht een fout. |
/tr
URL- |
Hiermee geeft u de URL van de RFC 3161 tijdstempelserver. Als deze optie of /t niet is opgegeven, is het ondertekende bestand geen tijdstempel. Als de tijdstempel mislukt, genereert de opdracht een waarschuwing. Deze optie kan niet worden gebruikt met de optie /t . |
/u
gebruik |
Hiermee geeft u het uitgebreide sleutelgebruik (EKU) op dat aanwezig moet zijn in het handtekeningcertificaat. De gebruikswaarde kan worden opgegeven door OID of tekenreeks. Het standaardgebruik is Code Signing of 1.3.6.1.5.5.7.3.3 . |
/uw |
Hiermee geeft u het gebruik van Windows System Component Verification of 1.3.6.1.4.1.311.10.3.6 . |
Zie SignTool gebruiken om een bestand te ondertekenenvoor gebruiksvoorbeelden.
Opties voor tijdstempelopdrachten
De volgende tabel bevat de opties die kunnen worden gebruikt met de opdracht timestamp
:
Optie Tijdstempel | Beschrijving |
---|---|
/p7 |
Tijdstempels PKCS #7 bestanden. |
/t
URL- |
Hiermee geeft u de URL van de tijdstempelserver. Het bestand dat een tijdstempel heeft, moet eerder zijn ondertekend. De /t of de optie /tr is vereist. |
/td
alg- |
Wordt gebruikt met de /tr optie om een digest-algoritme aan te vragen dat wordt gebruikt door de RFC 3161-tijdstempelserver.
Opmerking: als /td niet is opgegeven tijdens het tijdstempel, genereert de opdracht een waarschuwing. |
/tp
index |
Tijdstempels van de handtekening op index. |
/tr
URL- |
Hiermee geeft u de URL van de RFC 3161 tijdstempelserver. Het bestand dat een tijdstempel heeft, moet eerder zijn ondertekend. De /tr of de optie /t is vereist. |
Opdrachtopties controleren
De volgende tabel bevat de opties die kunnen worden gebruikt met de opdracht verify
:
Optie Verifiëren | Beschrijving |
---|---|
/a |
Hiermee geeft u op dat alle methoden kunnen worden gebruikt om het bestand te verifiëren. Eerst doorzoekt SignTool de catalogusdatabases om te bepalen of het bestand is aangemeld in een catalogus. Als het bestand niet is aangemeld in een catalogus, probeert SignTool de ingesloten handtekening van het bestand te controleren. We raden deze optie aan bij het controleren van bestanden die mogelijk of niet zijn aangemeld in een catalogus. Voorbeelden van bestanden die al dan niet zijn ondertekend, zijn Windows-bestanden of -stuurprogramma's. |
/ad |
Hiermee zoekt u de catalogus met behulp van de standaardcatalogusdatabase. |
/all |
Controleert alle handtekeningen in een bestand met meerdere handtekeningen. |
/as |
Hiermee vindt u de catalogus met behulp van de catalogusdatabase voor systeemonderdelen (stuurprogramma's). |
/ag
CatDBGUID- |
Hiermee zoekt u de catalogus in de catalogusdatabase die wordt geïdentificeerd door de GUID. |
/c
CatFile- |
Hiermee geeft u het catalogusbestand op naam. |
/d |
Hiermee wordt de beschrijving en beschrijvings-URL afgedrukt. Windows Vista en eerder: deze optie wordt niet ondersteund. |
/ds
Index |
Controleert de handtekening op een bepaalde positie. |
/hash {SHA1|SHA256} |
Hiermee geeft u een optioneel hash-algoritme dat moet worden gebruikt bij het zoeken naar een bestand in een catalogus. |
/kp |
Voert de verificatie uit met behulp van het beleid voor ondertekening van stuurprogramma's in de x64-kernelmodus. |
/ms |
Maakt gebruik van meerdere verificatiesemantiek. Dit gedrag is de standaardinstelling van een WinVerifyTrust aanroep. |
/o
versie |
Controleert het bestand op basis van de versie van het besturingssysteem. De versieparameter is van de vorm: <PlatformID>:<VerMajor>.<VerMinor->.<BuildNumber>. U wordt aangeraden de optie /o te gebruiken. Als /o niet is opgegeven, kan SignTool onverwachte resultaten retourneren. Als u bijvoorbeeld geen /o opneemt, worden systeemcatalogussen die correct worden gevalideerd op een ouder besturingssysteem mogelijk niet correct gevalideerd op een nieuwer besturingssysteem. |
/p7 |
Controleert PKCS #7-bestanden. Er worden geen bestaande beleidsregels gebruikt voor PKCS #7-validatie. SignTool controleert de handtekening en bouwt een keten voor het handtekeningcertificaat. |
/pa |
Hiermee geeft u op dat het standaardverificatiebeleid voor verificatie wordt gebruikt. Als de optie /pa niet is opgegeven, gebruikt SignTool het verificatiebeleid voor Windows-stuurprogramma's. Deze optie kan niet worden gebruikt met de catdb opties. |
/pg
PolicyGUID- |
Hiermee geeft u een verificatiebeleid per GUID. De GUID komt overeen met de ActionID van het verificatiebeleid. Deze optie kan niet worden gebruikt met de catdb opties. |
/ph |
Pagina-hashwaarden afdrukken en verifiëren. Windows Vista en eerder: deze optie wordt niet ondersteund. |
/r
RootSubjectName |
Hiermee geeft u de naam op van het onderwerp van het basiscertificaat waarnaar het handtekeningcertificaat moet worden gekoppeld. Deze waarde kan een subtekenreeks zijn van de volledige onderwerpnaam van het basiscertificaat. |
/tw |
Hiermee geeft u op dat de opdracht een waarschuwing genereert als de handtekening geen tijdstempel heeft. |
De opdracht SignTool verify
bepaalt of het handtekeningcertificaat is uitgegeven door een vertrouwde instantie, of het handtekeningcertificaat is ingetrokken en, optioneel, of het handtekeningcertificaat geldig is voor een specifiek beleid.
Met de opdracht SignTool verify
wordt de status van de ingesloten handtekening uitgevoerd, tenzij een optie is opgegeven om een catalogus te doorzoeken, zoals /a
, /ad
, /as
, /ag
of /c
.
Retourwaarde
SignTool retourneert een van de volgende afsluitcodes wanneer deze wordt beëindigd:
Afsluitcode | Beschrijving |
---|---|
0 |
De uitvoering is geslaagd. |
1 |
De uitvoering is mislukt. |
2 |
De uitvoering is voltooid met waarschuwingen. |
Voorbeelden
Met de volgende opdracht wordt het catalogusbestand MyCatalogFileName.cat toegevoegd aan de systeemonderdeel- en stuurprogrammadatabase. Met de optie /u
wordt indien nodig een unieke naam gegenereerd om te voorkomen dat een bestaand catalogusbestand met de naam MyCatalogFileName.catwordt vervangen.
signtool catdb /v /u MyCatalogFileName.cat
Met de volgende opdracht wordt automatisch een bestand ondertekend met behulp van het beste certificaat.
signtool sign /a /fd SHA256 MyFile.exe
Met de volgende opdracht wordt een bestand digitaal ondertekend met behulp van een certificaat dat is opgeslagen in een PFX-bestand dat met een wachtwoord is beveiligd.
signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe
Met de volgende opdracht wordt een bestand digitaal ondertekend en een tijdstempel weergegeven. Het certificaat dat wordt gebruikt om het bestand te ondertekenen, wordt opgeslagen in een PFX-bestand.
signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe
Met de volgende opdracht wordt een bestand ondertekend met behulp van een certificaat in het My
archief met een onderwerpnaam van My Company Certificate
.
signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe
Met de volgende opdracht wordt een ActiveX-besturingselement ondertekend en wordt informatie weergegeven in een browser wanneer de gebruiker wordt gevraagd het besturingselement te installeren.
signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe
Met de volgende opdracht wordt een bestand gestempeld dat al digitaal is ondertekend.
signtool timestamp /t http://timestamp.digicert.com MyFile.exe
Met de volgende opdracht wordt een bestand gestempeld met een RFC 3161-tijdstempelserver.
signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe
Met de volgende opdracht wordt gecontroleerd of een bestand is ondertekend.
signtool verify MyFile.exe
Met de volgende opdracht wordt een systeembestand gecontroleerd dat kan worden aangemeld in een catalogus.
signtool verify /a SystemFile.dll
Met de volgende opdracht wordt een systeembestand geverifieerd dat is aangemeld in een catalogus met de naam MyCatalog.cat
.
signtool verify /c MyCatalog.cat SystemFile.dll
Met de volgende opdracht wordt de handtekening volledig uit een bestand verwijderd.
signtool remove /s MyFile.exe