Set-AuthenticodeSignature
Ajoute une signature Authenticode à un script PowerShell ou à un autre fichier.
Syntaxe
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>]
Description
L’applet Set-AuthenticodeSignature
de commande ajoute une signature Authenticode à n’importe quel fichier qui prend en charge le package SIP (Subject Interface Package).
Dans un fichier de script PowerShell, la signature prend la forme d’un bloc de texte qui indique la fin des instructions exécutées dans le script. S'il existe une signature dans le fichier lors de l'exécution de cette applet de commande, cette signature est supprimée.
Exemples
Exemple 1 : signer un script à l’aide d’un certificat à partir du magasin de certificats local
Ces commandes récupèrent un certificat de signature de code auprès du fournisseur de certificats PowerShell et l’utilisent pour signer un script PowerShell.
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
FilePath = 'PsTestInternet2.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
La première commande utilise l’applet Get-ChildItem
de commande et le fournisseur de certificats PowerShell pour obtenir les certificats dans le Cert:\CurrentUser\My
sous-répertoire du magasin de certificats. Le Cert:
lecteur est le lecteur exposé par le fournisseur de certificats. Le paramètre CodeSigningCert , pris en charge uniquement par le fournisseur de certificats, limite les certificats récupérés à ceux avec l’autorité de signature de code. La commande stocke le résultat dans la $cert
variable.
La deuxième commande définit la $signingParameters
variable en tant que hashTable avec les paramètres de l’applet Set-AuthenticodeSignature
de commande pour signer le PSTestInternet2.ps1
script. Il utilise le paramètre FilePath pour spécifier le nom du script, le paramètre Certificate pour spécifier que le certificat est stocké dans la $cert
variable et le paramètre HashAlgorithm pour définir l’algorithme de hachage sur SHA256.
La troisième commande signe le script en platissant les paramètres définis dans $signingParameters
.
Remarque
L’utilisation du paramètre CodeSigningCert avec Get-ChildItem
uniquement les certificats qui ont une autorité de signature de code et qui contiennent une clé privée. S’il n’existe aucune clé privée, les certificats ne peuvent pas être utilisés pour la signature.
Exemple 2 : signer un script à l’aide d’un certificat à partir d’un fichier PFX
Ces commandes utilisent l’applet Get-PfxCertificate
de commande pour charger un certificat de signature de code. Ensuite, utilisez-le pour signer un script PowerShell.
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
FilePath = 'ServerProps.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
La première commande utilise l’applet Get-PfxCertificate
de commande pour charger le certificat C :\Test\MySign.pfx dans la $cert
variable.
La deuxième commande définit la $signingParameters
variable en tant que hashTable avec les paramètres de l’applet Set-AuthenticodeSignature
de commande pour signer le ServerProps.ps1
script. Il utilise le paramètre FilePath pour spécifier le nom du script, le paramètre Certificate pour spécifier que le certificat est stocké dans la $cert
variable et le paramètre HashAlgorithm pour définir l’algorithme de hachage sur SHA256.
La troisième commande signe le script en platissant les paramètres définis dans $signingParameters
.
Si le fichier de certificat est protégé par mot de passe, PowerShell vous invite à entrer le mot de passe.
Exemple 3 : Ajouter une signature qui inclut l’autorité racine
Cette commande ajoute une signature numérique qui inclut l'autorité racine dans la chaîne d'approbation, et elle est signée par un serveur d'horodatage tiers.
$signingParameters = @{
FilePath = 'C:\scripts\Remodel.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
IncludeChain = 'All'
TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters
La première commande définit la $signingParameters
variable en tant que hashTable avec les paramètres de l’applet Set-AuthenticodeSignature
de commande pour signer le script. Il utilise le paramètre FilePath pour spécifier le chemin d’accès au script, le paramètre Certificate pour spécifier que le certificat est stocké dans la $cert
variable et le paramètre HashAlgorithm pour définir l’algorithme de hachage sur SHA256. Il utilise le paramètre IncludeChain pour inclure toutes les signatures de la chaîne d’approbation, y compris l’autorité racine. Il utilise également le paramètre TimeStampServer pour ajouter un horodatage à la signature. Cela empêche l'échec du script quand le certificat expire.
La deuxième commande signe le script en platissant les paramètres définis dans $signingParameters
.
Paramètres
-Certificate
Spécifie le certificat qui sera utilisé pour signer le script ou le fichier. Entrez une variable qui stocke un objet qui représente le certificat ou une expression qui obtient le certificat.
Pour rechercher un certificat, utilisez ou utilisez Get-PfxCertificate
l’applet Get-ChildItem
de commande dans le lecteur de certificat Cert:
. Si le certificat n’est pas valide ou n’a code-signing
pas d’autorité, la commande échoue.
Type: | X509Certificate2 |
Position: | 1 |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-Confirm
Vous demande une confirmation avant d’exécuter l’applet de commande.
Type: | SwitchParameter |
Alias: | cf |
Position: | Named |
Valeur par défaut: | False |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-Content
Ce paramètre apparaît dans la liste de syntaxes, car il est défini dans la classe de base dérivée Set-AuthenticodeSignature
. Toutefois, la prise en charge de ce paramètre n’est pas implémentée dans Set-AuthenticodeSignature
.
Type: | Byte[] |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | True |
Accepter les caractères génériques: | False |
-FilePath
Spécifie le chemin d'accès à un fichier qui est en cours de signature.
Type: | String[] |
Position: | 1 |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | True |
Accepter les caractères génériques: | False |
-Force
Permet à l'applet de commande d'ajouter une signature à un fichier en lecture seule. Même en utilisant le paramètre Force, l’applet de commande ne peut pas remplacer les restrictions de sécurité.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | False |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-HashAlgorithm
Spécifie l'algorithme de hachage que Windows utilise pour calculer la signature numérique du fichier.
La valeur par défaut est SHA1. Les fichiers qui sont signés avec un algorithme de hachage différent peuvent ne pas être reconnus sur d'autres systèmes. Les algorithmes pris en charge dépendent de la version du système d’exploitation.
Pour obtenir la liste des valeurs possibles, consultez HashAlgorithmName Struct.
Type: | String |
Position: | Named |
Valeur par défaut: | Null |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-IncludeChain
Détermine les certificats de la chaîne d'approbation des certificats qui sont inclus dans la signature numérique. NotRoot est la valeur par défaut.
Les valeurs autorisées sont :
- Signataire : inclut uniquement le certificat du signataire.
- NotRoot : inclut tous les certificats de la chaîne de certificats, à l’exception de l’autorité racine.
- Tout : inclut tous les certificats de la chaîne de certificats.
Type: | String |
Position: | Named |
Valeur par défaut: | NotRoot |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-LiteralPath
Spécifie le chemin d'accès à un fichier qui est en cours de signature. Contrairement à FilePath, la valeur du paramètre LiteralPath est utilisée exactement comme il est typé. Aucun caractère n’est interprété en tant que caractère générique. Si le chemin d’accès inclut des caractères d’échappement, mettez-le entre des guillemets simples. Les guillemets simples indiquent à PowerShell de ne pas interpréter de caractères comme séquences d’échappement.
Type: | String[] |
Alias: | PSPath |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | True |
Accepter les caractères génériques: | False |
-SourcePathOrExtension
Ce paramètre apparaît dans la liste de syntaxes, car il est défini dans la classe de base dérivée Set-AuthenticodeSignature
. Toutefois, la prise en charge de ce paramètre n’est pas implémentée dans Set-AuthenticodeSignature
.
Type: | String[] |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | True |
Accepter les caractères génériques: | False |
-TimestampServer
Utilise le serveur d'horodatage spécifié pour ajouter un horodatage à la signature. Tapez l'URL du serveur d'horodatage sous forme de chaîne.
L'horodatage représente l'heure exacte à laquelle le certificat a été ajouté au fichier. Un horodatage empêche le script d'échouer si le certificat expire, car les utilisateurs et programmes peuvent vérifier que le certificat était valide au moment de la signature.
Type: | String |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-WhatIf
Montre ce qui se passe en cas d’exécution de l’applet de commande. L’applet de commande n’est pas exécutée.
Type: | SwitchParameter |
Alias: | wi |
Position: | Named |
Valeur par défaut: | False |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
Entrées
Vous pouvez diriger une chaîne qui contient le chemin d’accès du fichier à cette applet de commande.
Sorties
Cette applet de commande retourne un objet Signature représentant la valeur définie.