Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
DESCRIPTION COURTE
Explique comment signer des scripts afin qu’ils soient conformes aux stratégies d’exécution PowerShell.
DESCRIPTION DÉTAILLÉE
La politique d’exécution restreinte n’autorise l’exécution d’aucun script. Les stratégies d’exécution AllSigned et RemoteSigned empêchent PowerShell d’exécuter des scripts qui n’ont pas de signature numérique.
Cette rubrique explique comment exécuter des scripts sélectionnés qui ne sont pas signés, même si la stratégie d’exécution est RemoteSigned, et comment signer des scripts pour votre propre usage.
Pour plus d’informations sur les stratégies d’exécution de PowerShell, consultez about_Execution_Policies.
POUR AUTORISER L’EXÉCUTION DE SCRIPTS SIGNÉS
Lorsque vous démarrez PowerShell sur un ordinateur pour la première fois, la stratégie d’exécution restreinte (par défaut) est susceptible d’être en vigueur.
La politique Restreint n’autorise l’exécution d’aucun script.
Pour rechercher la stratégie d’exécution effective sur votre ordinateur, tapez :
Get-ExecutionPolicy
Pour exécuter des scripts non signés que vous écrivez sur votre ordinateur local et des scripts signés d’autres utilisateurs, démarrez PowerShell avec l’option Exécuter en tant qu’administrateur, puis utilisez la commande suivante pour remplacer la stratégie d’exécution sur l’ordinateur par RemoteSigned :
Set-ExecutionPolicy RemoteSigned
Pour plus d’informations, consultez la rubrique d’aide de l’applet de commande Set-ExecutionPolicy.
EXÉCUTION DE SCRIPTS NON SIGNÉS (POLITIQUE D’EXÉCUTION REMOTESIGNED)
Si votre stratégie d’exécution PowerShell est RemoteSigned, Windows PowerShell n’exécutera pas les scripts non signés téléchargés à partir d’Internet, y compris les scripts non signés que vous recevez par courrier électronique et programmes de messagerie instantanée.
Si vous essayez d’exécuter un script téléchargé, PowerShell affiche le message d’erreur suivant :
The file <file-name> cannot be loaded. The file <file-name> is not digitally
signed. The script will not execute on the system. Please see "Get-Help
about_Signing" for more details.
Avant d’exécuter le script, passez en revue le code pour vous assurer que vous l’approuvez. Les scripts ont le même effet que n’importe quel programme exécutable.
Pour exécuter un script non signé, utilisez l’applet de commande Unblock-File ou procédez comme suit.
- Enregistrez le fichier de script sur votre ordinateur.
- Cliquez sur Démarrer, sur Poste de travail et recherchez le fichier de script enregistré.
- Cliquez avec le bouton droit sur le fichier de script, puis cliquez sur Propriétés.
- Cliquez sur Débloquer.
Si un script téléchargé à partir d’Internet est signé numériquement, mais que vous n’avez pas encore choisi de faire confiance à son éditeur, PowerShell affiche le message suivant :
Do you want to run software from this untrusted publisher?
The file <file-name> is published by CN=<publisher-name>. This
publisher is not trusted on your system. Only run scripts
from trusted publishers.
[V] Never run [D] Do not run [R] Run once [A] Always run
[?] Help (default is "D"):
Si vous faites confiance à l’éditeur, sélectionnez « Exécuter une fois » ou « Toujours exécuter ». Si vous ne faites pas confiance à l’éditeur, sélectionnez « Ne jamais exécuter » ou « Ne pas exécuter ». Si vous sélectionnez « Ne jamais exécuter » ou « Toujours exécuter », PowerShell ne vous demandera plus cet éditeur.
MÉTHODES DE SIGNATURE DE SCRIPTS
Vous pouvez signer les scripts que vous écrivez et ceux que vous obtenez d’autres sources. Avant de signer un script, examinez chaque commande pour vérifier qu’elle peut être exécutée en toute sécurité.
Pour connaître les meilleures pratiques en matière de signature de code, consultez Code-Signing Bonnes pratiques.
Pour plus d’informations sur la façon de signer un fichier de script, consultez Set-AuthenticodeSignature.
L’applet New-SelfSignedCertificate de commande, introduite dans le module PKI dans PowerShell 3.0, crée un certificat auto-signé qui est approprié pour les tests. Pour plus d’informations, consultez la rubrique d’aide de l’applet de commande New-SelfSignedCertificate.
Pour ajouter une signature numérique à un script, vous devez le signer avec un certificat de signature de code. Deux types de certificats conviennent à la signature d’un fichier de script :
Certificats créés par une autorité de certification : pour des frais, une autorité de certification publique vérifie votre identité et vous donne un certificat de signature de code. Lorsque vous achetez votre certificat auprès d’une autorité de certification fiable, vous pouvez partager votre script avec des utilisateurs sur d’autres ordinateurs exécutant Windows, car ces autres ordinateurs approuvent l’autorité de certification.
Certificats que vous créez : vous pouvez créer un certificat auto-signé pour lequel votre ordinateur est l’autorité qui crée le certificat. Ce certificat est gratuit et vous permet d’écrire, de signer et d’exécuter des scripts sur votre ordinateur. Toutefois, un script signé par un certificat auto-signé ne s’exécutera pas sur d’autres ordinateurs.
En règle générale, vous n’utiliserez un certificat auto-signé que pour signer les scripts que vous écrivez pour votre propre usage et pour signer les scripts que vous obtenez d’autres sources dont vous avez vérifié qu’ils sont sûrs. Il n’est pas approprié pour les scripts qui seront partagés, même au sein d’une entreprise.
Si vous créez un certificat auto-signé, veillez à activer une protection forte de clé privée sur votre certificat. Cela empêche les programmes malveillants de signer des scripts en votre nom. Les instructions sont incluses à la fin de cette rubrique.
CRÉER UN CERTIFICAT SELF-SIGNED
Pour créer un certificat auto-signé, utilisez l’applet de commande New-SelfSignedCertificate dans le module PKI. Ce module est introduit dans PowerShell 3.0 et est inclus dans Windows 8 et Windows Server 2012. Pour plus d’informations, consultez la rubrique d’aide de l’applet de commande New-SelfSignedCertificate.
Pour créer un certificat auto-signé dans les versions antérieures de Windows, utilisez l’outil de création de certificat (MakeCert.exe). Cet outil est inclus dans le SDK Microsoft .NET Framework (versions 1.1 et ultérieures) et dans le SDK Microsoft Windows.
Pour plus d’informations sur la syntaxe et les descriptions des paramètres de l’outil MakeCert.exe, consultez Outil de création de certificats (MakeCert.exe).
Pour utiliser l’outil MakeCert.exe pour créer un certificat, exécutez les commandes suivantes dans une fenêtre d’invite de commandes du SDK.
Remarque : La première commande crée une autorité de certification locale pour votre ordinateur. La deuxième commande génère un certificat personnel à partir de l’autorité de certification.
Remarque : Vous pouvez copier ou taper les commandes exactement telles qu’elles apparaissent. Aucune substitution n’est nécessaire, même si vous pouvez modifier le nom du certificat.
makecert -n "CN=PowerShell Local Certificate Root" -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
-ss Root -sr localMachine
makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer
L’outil MakeCert.exe vous demandera un mot de passe de clé privée. Le mot de passe garantit qu’aucun utilisateur ne peut utiliser ou accéder au certificat sans votre consentement. Créez et entrez un mot de passe que vous pouvez mémoriser. Vous utiliserez ce mot de passe ultérieurement pour récupérer le certificat.
Pour vérifier que le certificat a été généré correctement, utilisez la commande suivante pour obtenir le certificat dans le magasin de certificats de l’ordinateur. (Vous ne trouverez pas de fichier de certificat dans le répertoire du système de fichiers.)
À l’invite PowerShell, tapez :
Get-ChildItem cert:\CurrentUser\my -codesigning
Cette commande utilise le fournisseur de certificats PowerShell pour afficher des informations sur le certificat.
Si le certificat a été créé, la sortie affiche l’empreinte numérique qui identifie le certificat dans un affichage qui ressemble à ce qui suit :
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]
SIGNER UN SCRIPT
Après avoir créé un certificat auto-signé, vous pouvez signer des scripts. Si vous utilisez la stratégie d’exécution AllSigned, la signature d’un script vous permet d’exécuter le script sur votre ordinateur.
L’exemple de script suivant, Add-Signature.ps1, signe un script. Toutefois, si vous utilisez la stratégie d’exécution AllSigned, vous devez signer le script Add-Signature.ps1 avant de l’exécuter.
Pour utiliser ce script, copiez le texte suivant dans un fichier texte et nommez-le Add-Signature.ps1.
## Signs a file
param([string] $file=$(throw "Please specify a filename."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert
Pour signer le fichier de script Add-Signature.ps1, tapez les commandes suivantes à l’invite de commande PowerShell :
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert
Une fois le script signé, vous pouvez l’exécuter sur l’ordinateur local. Toutefois, le script ne s’exécutera pas sur les ordinateurs sur lesquels la stratégie d’exécution PowerShell nécessite une signature numérique d’une autorité de confiance. Si vous essayez, PowerShell affiche le message d’erreur suivant :
The file C:\remote_file.ps1 cannot be loaded. The signature of the
certificate cannot be verified.
At line:1 char:15
+ .\ remote_file.ps1 <<<<
Si PowerShell affiche ce message lorsque vous exécutez un script que vous n’avez pas écrit, traitez le fichier comme vous le feriez pour n’importe quel script non signé. Passez en revue le code pour déterminer si vous pouvez approuver le script.
ACTIVER UNE PROTECTION RENFORCÉE PAR CLÉ PRIVÉE POUR VOTRE CERTIFICAT
Si vous disposez d’un certificat privé sur votre ordinateur, des programmes malveillants peuvent être en mesure de signer des scripts en votre nom, ce qui autorise PowerShell à les exécuter.
Pour empêcher la signature automatique en votre nom, utilisez le Gestionnaire de certificats (Certmgr.exe) pour exporter votre certificat de signature dans un fichier .pfx. Le Gestionnaire de certificats est inclus dans le SDK Microsoft .NET Framework, le SDK Microsoft Windows et Internet Explorer 5.0 et les versions ultérieures.
Pour exporter le certificat :
- Démarrez le Gestionnaire de certificats.
- Sélectionnez le certificat émis par la racine des certificats locaux de PowerShell.
- Cliquez sur Exporter pour lancer l’Assistant Exportation de certificats.
- Sélectionnez « Oui, exporter la clé privée », puis cliquez sur Suivant.
- Sélectionnez « Activer une protection renforcée ».
- Tapez un mot de passe, puis tapez-le à nouveau pour confirmer.
- Tapez un nom de fichier portant l’extension de nom de fichier .pfx.
- Cliquez sur Terminer.
Pour réimporter le certificat :
- Démarrez le Gestionnaire de certificats.
- Cliquez sur Importer pour démarrer l’Assistant Importation de certificats.
- Ouvrez-le à l’emplacement du fichier .pfx que vous avez créé pendant le processus d’exportation.
- Sur la page Mot de passe, sélectionnez « Activer la protection par clé privée forte », puis entrez le mot de passe que vous avez attribué lors du processus d’exportation.
- Sélectionnez le magasin de certificats personnel.
- Cliquez sur Terminer.
EMPÊCHER L’EXPIRATION DE LA SIGNATURE
La signature numérique d’un script est valide jusqu’à l’expiration du certificat de signature ou tant qu’un serveur d’horodatage peut vérifier que le script a été signé alors que le certificat de signature était valide.
Étant donné que la plupart des certificats de signature sont valides pendant un an uniquement, l’utilisation d’un serveur d’horodatage garantit que les utilisateurs peuvent utiliser votre script pendant de nombreuses années à venir.