Partager via


Set-AuthenticodeSignature

Ajoute une signature Authenticode à un script PowerShell ou à un autre fichier.

Syntaxe

ByPath (Par défaut)

Set-AuthenticodeSignature
    [-Certificate] <X509Certificate2>
    [-FilePath] <String[]>
    [-IncludeChain <String>]
    [-TimestampServer <String>]
    [-HashAlgorithm <String>]
    [-Force]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ByLiteralPath

Set-AuthenticodeSignature
    [-Certificate] <X509Certificate2>
    -LiteralPath <String[]>
    [-IncludeChain <String>]
    [-TimestampServer <String>]
    [-HashAlgorithm <String>]
    [-Force]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ByContent

Set-AuthenticodeSignature
    [-Certificate] <X509Certificate2>
    -SourcePathOrExtension <String[]>
    -Content <Byte[]>
    [-IncludeChain <String>]
    [-TimestampServer <String>]
    [-HashAlgorithm <String>]
    [-Force]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

L’applet de commande Set-AuthenticodeSignature ajoute une signature Authenticode à n’importe quel fichier prenant en charge 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 de commande Get-ChildItem et le fournisseur de certificats PowerShell pour obtenir les certificats dans le sous-répertoire Cert:\CurrentUser\My du magasin de certificats. Le lecteur Cert: 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 variable $cert.

La deuxième commande définit la variable $signingParameters en tant que hashTable avec les paramètres de l’applet de commande Set-AuthenticodeSignature pour signer le script PSTestInternet2.ps1. 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 variable $cert 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 retourne uniquement les certificats qui ont une autorité de signature de code et 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 de commande Get-PfxCertificate 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 de commande Get-PfxCertificate pour charger le certificat C :\Test\MySign.pfx dans la variable $cert.

La deuxième commande définit la variable $signingParameters en tant que hashTable avec les paramètres de l’applet de commande Set-AuthenticodeSignature pour signer le script ServerProps.ps1. 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 variable $cert 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 commande utilise le paramètre FilePath pour spécifier le script signé et le paramètre Certificate pour spécifier le certificat enregistré dans la variable $cert. Il utilise le paramètre IncludeChain pour inclure toutes les signatures de la chaîne de confiance, 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 lors de l’expiration du certificat.

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 représentant le certificat ou une expression qui obtient le certificat.

Pour rechercher un certificat, utilisez Get-PfxCertificate ou l'applet de commande Get-ChildItem dans le lecteur de certificats Cert:. Si le certificat n’est pas valide ou n’a pas d’autorité code-signing, la commande échoue.

Propriétés du paramètre

Type:X509Certificate2
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:1
Obligatoire:True
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-Confirm

Vous invite à confirmer avant d’exécuter l’applet de commande.

Propriétés du paramètre

Type:SwitchParameter
Valeur par défaut:False
Prend en charge les caractères génériques:False
DontShow:False
Alias:cf

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-Content

Ce paramètre apparaît dans la liste de syntaxe, car il est défini dans la classe de base à partir de laquelle Set-AuthenticodeSignature est dérivée. Toutefois, la prise en charge de ce paramètre n’est pas implémentée dans Set-AuthenticodeSignature.

Propriétés du paramètre

Type:

Byte[]

Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

ByContent
Position:Named
Obligatoire:True
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:True
Valeur des arguments restants:False

-FilePath

Spécifie le chemin d’accès à un fichier en cours de signature.

Propriétés du paramètre

Type:

String[]

Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

ByPath
Position:1
Obligatoire:True
Valeur du pipeline:True
Valeur du pipeline par nom de propriété:True
Valeur des arguments restants:False

-Force

Permet à l’applet de commande d’ajouter une signature à un fichier en lecture seule. Même en utilisant le paramètre Force, le cmdlet ne peut pas remplacer les restrictions de sécurité.

Propriétés du paramètre

Type:SwitchParameter
Valeur par défaut:False
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-HashAlgorithm

Spécifie l’algorithme de hachage utilisé par Windows pour calculer la signature numérique du fichier.

La valeur par défaut est SHA1. Les fichiers signés avec un autre algorithme de hachage 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.

Propriétés du paramètre

Type:String
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-IncludeChain

Détermine les certificats de la chaîne d’approbation de certificats inclus dans la signature numérique. NotRoot est la valeur par défaut.

Les valeurs valides sont les suivantes :

  • Signer: inclut uniquement le certificat du signataire.
  • NotRoot: inclut tous les certificats de la chaîne de certificats, à l’exception de l’autorité racine.
  • All: inclut tous les certificats de la chaîne de certificats.

Propriétés du paramètre

Type:String
Valeur par défaut:NotRoot
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-LiteralPath

Spécifie le chemin d’accès à un fichier en cours de signature. Contrairement FilePath, la valeur du paramètre LiteralPath est utilisée exactement comme 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.

Propriétés du paramètre

Type:

String[]

Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False
Alias:PSPath

Jeux de paramètres

ByLiteralPath
Position:Named
Obligatoire:True
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:True
Valeur des arguments restants:False

-SourcePathOrExtension

Ce paramètre apparaît dans la liste de syntaxe, car il est défini dans la classe de base à partir de laquelle Set-AuthenticodeSignature est dérivée. Toutefois, la prise en charge de ce paramètre n’est pas implémentée dans Set-AuthenticodeSignature.

Propriétés du paramètre

Type:

String[]

Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

ByContent
Position:Named
Obligatoire:True
Valeur du pipeline:True
Valeur du pipeline par nom de propriété:True
Valeur des arguments restants: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’URL doit commencer par http://.

L’horodatage représente l’heure exacte à laquelle le certificat a été ajouté au fichier. Un horodatage empêche l’échec du script si le certificat expire, car les utilisateurs et les programmes peuvent vérifier que le certificat était valide au moment de la signature.

Propriétés du paramètre

Type:String
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-WhatIf

Affiche ce qui se passerait si l’applet de commande s’exécute. L’applet de commande n’est pas exécutée.

Propriétés du paramètre

Type:SwitchParameter
Valeur par défaut:False
Prend en charge les caractères génériques:False
DontShow:False
Alias:Wi

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

CommonParameters

Cette applet de commande prend en charge les paramètres courants : -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction et -WarningVariable. Pour plus d’informations, consultez about_CommonParameters.

Entrées

String

Vous pouvez transmettre une chaîne qui contient le chemin d'accès du fichier à cette cmdlet.

Sorties

Signature

Ce cmdlet retourne un objet Signature qui représente la valeur qu'il a définie.