SignTool
SignTool è uno strumento da riga di comando che firma digitalmente i file, verifica le firme nei file e i file timestamp. Per informazioni sul motivo per cui i file di firma sono importanti, vedere Introduzione alla firma del codice.
Lo strumento viene installato nella cartella \Bin del percorso di installazione di Microsoft Windows Software Development Kit (SDK), ad esempio C:\Programmi (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe.
SignTool è disponibile come parte di Windows SDK, che è possibile scaricare da Windows SDK.
Nota
L'SDK Windows 10, Windows 10 HLK, Windows 10 WDK e Windows 10 ADK compila 20236 e versioni successive richiede di specificare l'algoritmo di digest. Il comando SignTool sign
richiede rispettivamente l'opzione dell'algoritmo del digest dei file (/fd
) e l'opzione dell'algoritmo timestamp (/td
) durante la firma e il timestamp.
Se /fd
non viene specificato durante la firma e se /td
non viene specificato durante il timestamp, il comando genera un avviso, il codice di errore 0, inizialmente. Nelle versioni successive di SignTool l'avviso diventa un errore. È consigliabile SHA256. È considerato più sicuro di SHA1 dal settore.
Sintassi
signtool [command] [options] [file_name | ...]
Parametri
Argomento | Descrizione |
---|---|
command |
Uno dei quattro comandi che specifica un'operazione da eseguire in un file: catdb , sign , timestamp o verify . Per una descrizione di ogni comando, vedere la tabella successiva. |
options |
Opzione che modifica un comando. Oltre alle opzioni globali /q e /v , ciascun comando supporta un set univoco di opzioni. |
file_name |
Il percorso di un file da firmare. |
SignTool supporta i comandi seguenti:
Comando | Descrizione |
---|---|
catdb |
Aggiunge o rimuove un file di catalogo da un database di cataloghi. I database dei cataloghi vengono usati per la ricerca automatica di file di catalogo e sono identificati dal GUID. Per un elenco delle opzioni supportate dal catdb comando, vedere opzioni di comando catdb. |
sign |
Firma digitalmente i file. Le firme digitali proteggono i file da manomissione e consentono agli utenti di verificare il firmatario in base a un certificato di firma. Per un elenco delle opzioni supportate dal sign comando, vedere Opzioni di comando di firma. |
timestamp |
File di timestamp. Per un elenco delle opzioni supportate dal timestamp comando, vedere opzioni di comando timestamp. |
verify |
Verifica la firma digitale dei file. Determina se il certificato di firma è stato rilasciato da un'autorità attendibile, se il certificato di firma è stato revocato e, facoltativamente, se il certificato di firma è valido per un criterio specifico. Per un elenco delle opzioni supportate dal verify comando, vedere Verificare le opzioni di comando. |
Le opzioni seguenti si applicano a tutti i comandi SignTool.
Opzione globale | Descrizione |
---|---|
/q |
Non visualizza alcun output se il comando viene eseguito correttamente e visualizza un output minimo se il comando ha esito negativo. |
/v |
Visualizza un output dettagliato indipendentemente dall'esito del comando e visualizza messaggi di avviso. |
/debug |
Visualizza le informazioni di debug. |
Opzioni di comando catdb
Nella tabella seguente vengono illustrate le opzioni utilizzabili con il comando catdb
.
Opzione catdb | Descrizione |
---|---|
/d |
Specifica che il database dei cataloghi predefinito viene aggiornato. Se non si usa /d o /g , SignTool aggiorna il componente di sistema e il database del driver. |
/g GUID |
Specifica che il database del catalogo identificato dal GUID viene aggiornato. |
/r |
Rimuove il catalogo specificato dal database del catalogo. Se questa opzione non è specificata, SignTool aggiunge il catalogo specificato al database del catalogo. |
/u |
Specifica che un nome univoco viene generato automaticamente per i file di catalogo aggiunti. Se necessario, i file di catalogo vengono rinominati per evitare conflitti con i nomi dei file di catalogo esistenti. Se questa opzione non è specificata, SignTool sovrascrive qualsiasi catalogo esistente con lo stesso nome del catalogo specificato. |
Nota
I database del catalogo vengono usati per la ricerca automatica dei file di catalogo.
Opzioni del comando Sign
Nella tabella seguente vengono illustrate le opzioni utilizzabili con il comando sign
.
Opzioni del comando sign | Descrizione |
---|---|
/a |
Seleziona automaticamente il miglior certificato di firma. SignTool trova tutti i certificati validi che soddisfano tutte le condizioni specificate e seleziona quella valida per il tempo più lungo. Se questa opzione non è presente, SignTool prevede di trovare un solo certificato di firma valido. |
/ac File |
Aggiunge un altro certificato dal file al blocco di firma. |
/as |
Aggiunge questa firma. Se non esiste alcuna firma primaria, questa firma viene invece effettuata la firma primaria. |
/c CertTemplateName |
Specifica un'estensione Microsoft, Certificate Template Name, per il certificato di firma. |
/csp CSPName |
Specifica il provider del servizio di crittografia (CSP) che contiene il contenitore di chiavi private. |
/d Desc |
Specifica una descrizione del contenuto firmato. |
/dg Percorso |
Genera il digest da firmare e i file PKCS7 non firmati. Il digest di output e i file PKCS7 sono <Path>\FileName.dig e Path\<FileName.p7u>>.<>< Per restituire un file XML aggiuntivo, usare /dxml . |
/di Percorso |
Crea la firma inserendo il digest firmato nel file PKCS7 senza segno. Il digest e i file PKCS7 firmati con segno devono essere <Path>\FileName.dig.signed e Path\<FileName.p7u>>.<>< |
/dlib DLL |
Specifica la DLL che implementa la AuthenticodeDigestSign funzione per firmare il digest con. Questa opzione equivale a usare SignTool separatamente con le /dg opzioni , /ds e /di . Questa opzione richiama tutte e tre come un'operazione atomica. |
/dmdf Filename |
Se usato con l'opzione /dg , passa il contenuto del file alla AuthenticodeDigestSign funzione senza modifiche. |
/ds |
Firma solo il digest. Il file di input deve essere il digest generato dall'opzione /dg . Il file di output è: <File.signed>. |
/du URL |
Specifica un URL (Uniform Resource Locator) per la descrizione espansa del contenuto firmato. |
/dxml |
Se usato con l'opzione /dg , produce un file XML. Il file di output è: <Path>\<FileName>.dig.xml. |
/f SignCertFile |
Specifica il certificato di firma in un file. Se il file è nel formato PFX (Personal Information Exchange) ed è protetto da una password, usare l'opzione /p per specificare la password. Se il file non contiene chiavi private, usare le /csp opzioni e /kc per specificare il nome del contenitore CSP e della chiave privata. |
/fd Alg |
Specifica l'algoritmo digest file da usare per creare le firme del file. Nota: se l'opzione non è specificata durante la /fd firma, il comando genera un errore. |
/fd certHash |
Se si specifica la stringa "certHash", il comando usa l'algoritmo specificato nel certificato di firma. Nota: se l'opzione non è specificata durante la /fd firma, il comando genera un errore. |
/i Issuername |
Specifica il nome dell'emittente del certificato di firma. Questo valore può essere una sottostringa dell'intero nome dell'emittente. |
/kc PrivKeyContainerName |
Specifica il nome del contenitore delle chiavi private. |
/n Subjectname |
Specifica il nome del soggetto del certificato di firma. Questo valore può essere una sottostringa dell'intero nome del soggetto. |
/nph |
Se supportato, sopprime gli hash delle pagine per i file eseguibili. Il valore predefinito è determinato dalla variabile di ambiente SIGNTOOL_PAGE_HASHES e dalla versione wintrust.dll . Questa opzione viene ignorata per i file non PE. |
/p Password |
Specifica la password da usare all'apertura di un file PFX Usare l'opzione /f per specificare un file PFX. |
/p7 Percorso |
Specifica di produrre un file PKCS (Public Key Cryptography Standards) #7 per ogni file di contenuto specificato. I file PKCS #7 sono denominati <path>\<filename.p7>. |
/p7ce Valore |
Specifica le opzioni per il contenuto PKCS #7 firmato. Impostare Valore su Embedded per incorporare il contenuto firmato nel file PKCS #7 oppure DetachedSignedData per produrre la parte dei dati firmata di un file PKCS #7 scollegato. Se l'opzione /p7ce non è specificata, il contenuto firmato viene incorporato per impostazione predefinita. |
/p7co <OID> |
Specifica l'identificatore di oggetto (OID) tramite cui viene identificato il contenuto PKCS #7 firmato. |
/ph |
Se supportato, genera gli hash delle pagine per i file eseguibili. |
/r RootSubjectName |
Specifica il nome del soggetto del certificato radice cui deve essere concatenato il certificato di firma. Questo valore può essere una sottostringa dell'intero nome del soggetto del certificato radice. |
/s Storename |
Specifica l'archivio da aprire quando il comando cerca il certificato. Se questa opzione non è specificata, il comando apre l'archivio My . |
/sha1 Hash |
Specifica l'hash SHA1 del certificato di firma. L'hash SHA1 viene comunemente usato quando più certificati soddisfano i criteri specificati dalle opzioni rimanenti. |
/sm |
Specifica che il comando usa un archivio computer anziché un archivio utenti. |
/t URL |
Specifica l'URL del server di timestamp. Se questa opzione o /tr non è specificata, il file firmato non viene contrassegnato come timestamp. Se il timestamp ha esito negativo, il comando genera un avviso. Questa opzione non può essere usata con l'opzione /tr . |
/td Alg |
Usata con l'opzione /tr per richiedere un algoritmo digest usato dal server di timestamp RFC 3161. Nota: se /td non viene specificato durante il timestamp, il comando genera un errore. |
/tr URL |
Specifica l'URL del server di timestamp RFC 3161. Se questa opzione o /t non è specificata, il file firmato non viene contrassegnato come timestamp. Se il timestamp ha esito negativo, il comando genera un avviso. Questa opzione non può essere usata con l'opzione /t . |
/u Utilizzo |
Specifica l'utilizzo chiavi avanzato (EKU) che deve essere presente nel certificato di firma. Il valore di utilizzo può essere specificato tramite OID o stringa. L'utilizzo predefinito è Code Signing o 1.3.6.1.5.5.7.3.3 . |
/uw |
Specifica l'utilizzo di Windows System Component Verification o 1.3.6.1.4.1.311.10.3.6 . |
Per esempi di utilizzo, vedere Using SignTool to Sign a File (Uso di SignTool per firmare un file).
Opzioni di comando timestamp
Nella tabella seguente vengono illustrate le opzioni utilizzabili con il comando timestamp
.
Opzione Timestamp | Descrizione |
---|---|
/p7 |
Aggiunge un timestamp ai file PKCS #7. |
/t URL |
Specifica l'URL del server di timestamp. È necessario che il file a cui viene aggiunto il timestamp sia stato precedentemente firmato. È richiesta l'opzione /t o /tr . |
/td Alg |
Usata con l'opzione /tr per richiedere un algoritmo digest usato dal server di timestamp RFC 3161. Nota: se /td non è specificato durante il timestamp, il comando genera un avviso. |
/tp Indice |
Aggiunge un timestamp alla firma in corrispondenza di indice. |
/tr URL |
Specifica l'URL del server di timestamp RFC 3161. È necessario che il file a cui viene aggiunto il timestamp sia stato precedentemente firmato. È richiesta l'opzione /tr o /t . |
Verificare le opzioni di comando
Opzione Verify | Descrizione |
---|---|
/a |
Specifica che tutti i metodi possono essere usati per verificare il file. SignTool cerca innanzitutto i database del catalogo per determinare se il file è connesso a un catalogo. Se il file non è connesso in alcun catalogo, SignTool tenta di verificare la firma incorporata del file. È consigliabile questa opzione durante la verifica dei file che potrebbero o non essere connessi a un catalogo. Esempi di file che potrebbero o non essere firmati includono file o driver di Windows. |
/ad |
Trova il catalogo usando il database dei cataloghi predefinito. |
/all |
Verifica tutte le firme in un file con più firme. |
/as |
Trova il catalogo usando il database dei cataloghi (driver) dei componenti del sistema. |
/ag CatDBGUID |
Trova il catalogo nel database del catalogo identificato dal GUID. |
/c CatFile |
Specifica il file di catalogo in base al nome. |
/d |
Stampa la descrizione e l'URL della descrizione. Windows Vista e versioni precedenti: questa opzione non è supportata. |
/ds Indice |
Verifica la firma in una determinata posizione. |
/hash {SHA1|SHA256} |
Specifica un algoritmo hash facoltativo da usare quando si cerca un file in un catalogo. |
/kp |
Esegue la verifica usando i criteri di firma del driver in modalità kernel x64. |
/ms |
Usa semantica di verifica multipla. Questo comportamento è l'impostazione predefinita di una chiamata WinVerifyTrust . |
/o Versione |
Verifica il file in base alla versione del sistema operativo. Il parametro version è nel formato:< PlatformID>:<VerMajor>.< VerMinor>.< BuildNumber>. È consigliabile usare l'opzione /o . Se /o non viene specificato, SignTool potrebbe restituire risultati imprevisti. Ad esempio, se non si include /o , i cataloghi di sistema che vengono convalidati correttamente in un sistema operativo precedente potrebbero non essere convalidati correttamente in un sistema operativo più recente. |
/p7 |
Verifica i file PKCS #7. Non viene usato alcun criterio esistente per la convalida PKCS #7. SignTool controlla la firma e compila una catena per il certificato di firma. |
/pa |
Specifica che viene utilizzato il criterio di verifica dell'autenticazione predefinito. Se l'opzione /pa non è specificata, SignTool usa i criteri di verifica driver di Windows. Questa opzione non può essere usata con le catdb opzioni. |
/pg PolicyGUID |
Specifica i criteri di verifica in base al GUID. Il GUID corrisponde al ActionID del criterio di verifica. Questa opzione non può essere usata con le catdb opzioni. |
/ph |
Stampare e verificare i valori hash della pagina. Windows Vista e versioni precedenti: questa opzione non è supportata. |
/r RootSubjectName |
Specifica il nome del soggetto del certificato radice cui deve essere concatenato il certificato di firma. Questo valore può essere una sottostringa dell'intero nome del soggetto del certificato radice. |
/tw |
Specifica che il comando genera un avviso se la firma non è contrassegnata come timestamp. |
Il comando SignTool verify
determina se il certificato di firma è stato emesso da un'autorità attendibile, se il certificato di firma è stato revocato e, facoltativamente, se il certificato di firma è valido per un criterio specifico.
Il comando SignTool verify
restituisce lo stato della firma incorporata, a meno che non venga specificata un'opzione per eseguire ricerche in un catalogo, ad esempio /a
, /ad
/as
, /ag
o /c
.
Valore restituito
SignTool restituisce uno dei codici di uscita seguenti quando termina.
Codice di uscita | Descrizione |
---|---|
0 | Esecuzione completata correttamente. |
1 | Esecuzione non riuscita. |
2 | Esecuzione completata con avvisi. |
Esempio
Il comando seguente aggiunge il file di catalogo MyCatalogFileName.cat al database del componente di sistema e del driver. Se /u
necessario, l'opzione genera un nome univoco per impedire la sostituzione di un file di catalogo esistente denominato MyCatalogFileName.cat.
signtool catdb /v /u MyCatalogFileName.cat
Il comando seguente firma automaticamente un file usando il certificato migliore.
signtool sign /a /fd SHA256 MyFile.exe
Il comando seguente appone una firma digitale a un file usando un certificato archiviato in un file PFX protetto da password.
signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe
Il comando seguente firma digitalmente e timestamp un file. Il certificato usato per firmare il file è memorizzato in un file PFX.
signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe
Il comando seguente firma un file usando un certificato contenuto nell'archivio My
con nome soggetto My Company Certificate
.
signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe
Il comando seguente firma un controllo ActiveX e fornisce informazioni visualizzate in un browser quando all'utente viene richiesto di installare il controllo.
signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe
Il comando seguente contrassegna un file già firmato digitalmente.
signtool timestamp /t http://timestamp.digicert.com MyFile.exe
Il comando seguente contrassegna un file usando un server timestamp RFC 3161.
signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe
Il comando seguente verifica che un file sia stato firmato.
signtool verify MyFile.exe
Il comando seguente verifica un file di sistema che può essere firmato in un catalogo.
signtool verify /a SystemFile.dll
Il comando seguente verifica un file di sistema firmato in un catalogo denominato MyCatalog.cat
.
signtool verify /c MyCatalog.cat SystemFile.dll
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per