Set-AuthenticodeSignature
Aggiunge una firma Authenticode a uno script di PowerShell o a un altro file.
Sintassi
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-FilePath] <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-LiteralPath <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-SourcePathOrExtension <String[]>
-Content <Byte[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Descrizione
Il Set-AuthenticodeSignature
cmdlet aggiunge una firma Authenticode a qualsiasi file che supporta Il pacchetto SIP (Subject Interface Package).
In un file di script di PowerShell la firma assume la forma di un blocco di testo che indica la fine delle istruzioni eseguite nello script. Se è presente una firma nel file quando viene eseguito questo cmdlet, tale firma viene rimossa.
Esempio
Esempio 1- Firmare uno script usando un certificato dall'archivio certificati locale
Questi comandi recuperano un certificato di firma del codice dal provider di certificati di PowerShell e lo usano per firmare uno script di PowerShell.
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
FilePath = 'PsTestInternet2.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
Il primo comando usa il Get-ChildItem
cmdlet e il provider di certificati PowerShell per ottenere i certificati nella Cert:\CurrentUser\My
sottodirectory dell'archivio certificati. L'unità Cert:
è l'unità esposta dal provider di certificati. Il parametro CodeSigningCert , supportato solo dal provider di certificati, limita i certificati recuperati a quelli con autorità di firma del codice. Il comando archivia il risultato nella $cert
variabile.
Il secondo comando definisce la $signingParameters
variabile come hashTable con i parametri per il Set-AuthenticodeSignature
cmdlet per firmare lo PSTestInternet2.ps1
script. Usa il parametro FilePath per specificare il nome dello script, il parametro Certificate per specificare che il certificato viene archiviato nella $cert
variabile e il parametro HashAlgorithm per impostare l'algoritmo hash su SHA256.
Il terzo comando firma lo script splatting dei parametri definiti in $signingParameters
.
Nota
L'uso del parametro CodeSigningCert con Get-ChildItem
restituisce solo i certificati con autorità di firma del codice e che contengono una chiave privata. Se non è presente alcuna chiave privata, non è possibile usare i certificati per la firma.
Esempio 2- Firmare uno script usando un certificato da un file PFX
Questi comandi usano il Get-PfxCertificate
cmdlet per caricare un certificato di firma del codice. Usarlo quindi per firmare uno script di PowerShell.
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
FilePath = 'ServerProps.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
Il primo comando usa il Get-PfxCertificate
cmdlet per caricare il certificato C:\Test\MySign.pfx nella $cert
variabile .
Il secondo comando definisce la $signingParameters
variabile come hashTable con i parametri per il Set-AuthenticodeSignature
cmdlet per firmare lo ServerProps.ps1
script. Usa il parametro FilePath per specificare il nome dello script, il parametro Certificate per specificare che il certificato viene archiviato nella $cert
variabile e il parametro HashAlgorithm per impostare l'algoritmo hash su SHA256.
Il terzo comando firma lo script splatting dei parametri definiti in $signingParameters
.
Se il file di certificato è protetto da password, PowerShell richiede la password.
Esempio 3- Aggiungere una firma che include l'autorità radice
Questo comando aggiunge una firma digitale che include l'autorità radice nella catena di certificati ed è firmato da un server di timestamp di terze parti.
$signingParameters = @{
FilePath = 'C:\scripts\Remodel.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
IncludeChain = 'All'
TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters
Il primo comando definisce la $signingParameters
variabile come hashTable con i parametri per il Set-AuthenticodeSignature
cmdlet per firmare lo script. Usa il parametro FilePath per specificare il percorso dello script, il parametro Certificate per specificare che il certificato viene archiviato nella $cert
variabile e il parametro HashAlgorithm per impostare l'algoritmo hash su SHA256. Usa il parametro IncludeChain per includere tutte le firme nella catena di attendibilità, inclusa l'autorità radice. Usa anche il parametro TimeStampServer per aggiungere un timestamp alla firma. Ciò evita che lo script non riesca quando scade il certificato.
Il secondo comando firma lo script splatting dei parametri definiti in $signingParameters
.
Parametri
-Certificate
Specifica il certificato usato per firmare lo script o il file. Immettere una variabile che archivia un oggetto che rappresenta il certificato o un'espressione che ottiene il certificato.
Per trovare un certificato, usare Get-PfxCertificate
o usare il Get-ChildItem
cmdlet nell'unità Certificato Cert:
. Se il certificato non è valido o non dispone code-signing
dell'autorità, il comando non riesce.
Tipo: | X509Certificate2 |
Posizione: | 1 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Confirm
Richiede conferma prima di eseguire il cmdlet.
Tipo: | SwitchParameter |
Alias: | cf |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Content
Questo parametro viene visualizzato nell'elenco di sintassi perché è definito nella classe Set-AuthenticodeSignature
di base derivata da . Tuttavia, il supporto per questo parametro non viene implementato in Set-AuthenticodeSignature
.
Tipo: | Byte[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-FilePath
Specifica il percorso di un file da firmare.
Tipo: | String[] |
Posizione: | 1 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Force
Consente al cmdlet di aggiungere una firma in un file di sola lettura. Anche usando il parametro Force , il cmdlet non può eseguire l'override delle restrizioni di sicurezza.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-HashAlgorithm
Specifica l'algoritmo hash che Windows usa per calcolare la firma digitale per il file.
Il valore predefinito è SHA1. File firmati con un algoritmo di hash diverso potrebbero non essere riconosciuti in altri sistemi. Gli algoritmi supportati dipendono dalla versione del sistema operativo.
Per un elenco dei valori possibili, vedere HashAlgorithmName Struct.
Tipo: | String |
Posizione: | Named |
Valore predefinito: | Null |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-IncludeChain
Determina quali certificati nella catena di certificati attendibili sono inclusi nella firma digitale. NotRoot è l'impostazione predefinita.
I valori validi sono:
- Firmatario: include solo il certificato del firmatario.
- NotRoot: include tutti i certificati nella catena di certificati, ad eccezione dell'autorità radice.
- Tutto: include tutti i certificati nella catena di certificati.
Tipo: | String |
Posizione: | Named |
Valore predefinito: | NotRoot |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-LiteralPath
Specifica il percorso di un file da firmare. A differenza di FilePath, il valore del parametro LiteralPath viene usato esattamente come viene tipizzato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.
Tipo: | String[] |
Alias: | PSPath |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-SourcePathOrExtension
Questo parametro viene visualizzato nell'elenco di sintassi perché è definito nella classe Set-AuthenticodeSignature
di base derivata da . Tuttavia, il supporto per questo parametro non viene implementato in Set-AuthenticodeSignature
.
Tipo: | String[] |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-TimestampServer
Usa il server di timestamp specificato per aggiungere un timestamp alla firma. Digitare l'URL del server di timestamp in formato stringa.
Il timestamp rappresenta l'ora esatta in cui il certificato è stato aggiunto al file. Un timestamp evita che lo script non riesca se il certificato scade perché consente a utenti e programmi di verificare la validità del certificato al momento della firma.
Tipo: | String |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-WhatIf
Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.
Tipo: | SwitchParameter |
Alias: | wi |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe una stringa contenente il percorso del file a questo cmdlet.
Output
Questo cmdlet restituisce un oggetto Signature che rappresenta il valore impostato.