RUBRIQUE
about_signing
DESCRIPTION COURTE
Explique comment signer des scripts afin qu'ils soient conformes aux
stratégies d'exécution Windows PowerShell.
DESCRIPTION LONGUE
La stratégie d'exécution Restricted n'autorise pas l'exécution de
scripts. Les stratégies d'exécution RemoteSigned et AllSigned empêchent
Windows 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 lorsque la stratégie d'exécution est
RemoteSigned, et comment signer des scripts pour votre propre utilisation.
Pour plus d'informations sur les stratégies d'exécution Windows
PowerShell, consultez about_Execution_Policy.
POUR AUTORISER L'EXÉCUTION DE SCRIPTS SIGNÉS
-------------------------------
La première fois que vous démarrez Windows PowerShell sur un
ordinateur, la stratégie d'exécution Restricted (valeur par
défaut) est probablement appliquée.
La stratégie Restricted n'autorise pas l'exécution de scripts.
Pour rechercher la stratégie d'exécution qui fonctionnera sur votre
ordinateur, tapez :
get-executionpolicy
Pour exécuter des scripts non signés écrits sur votre ordinateur
local et des scripts signés d'autres utilisateurs, utilisez la
commande suivante pour modifier la stratégie d'exécution sur
l'ordinateur en RemoteSigned :
set-executionpolicy remotesigned
Pour plus d'informations, consultez Set-ExecutionPolicy.
EXÉCUTION DE SCRIPTS NON SIGNÉS (STRATÉGIE D'EXÉCUTION REMOTESIGNED)
--------------------------------------------------------
Si votre stratégie d'exécution Windows PowerShell est RemoteSigned,
Windows PowerShell n'exécutera pas les scripts non signés téléchargés
à partir d'Internet, y compris les programmes de messagerie
électronique et de messagerie instantanée.
Si vous essayez d'exécuter un script téléchargé, Windows
PowerShell affiche le message d'erreur suivant :
Impossible de charger le fichier <nom-fichier>. Le fichier
<nom-fichier> n'est pas signé numériquement. Le script
ne sera pas exécuté sur le système. Pour plus de détails,
consultez " Get-Help about_signing ".
Avant d'exécuter le script, examinez le code pour être sûr que vous
l'approuvez.
Les scripts ont le même effet que tout programme exécutable.
Pour exécuter un script non signé
1. Enregistrez le fichier de script sur votre ordinateur.
2. Cliquez sur Démarrer, puis sur Poste de travail et localisez
le fichier de script enregistré.
3. Cliquez avec le bouton droit sur le fichier de script,
puis cliquez sur Propriétés.
4. Cliquez sur Débloquer.
Si un script qui a été téléchargé à partir d'Internet est signé
numériquement, mais que vous n'avez pas encore choisi d'approuver
son éditeur, Windows PowerShell affiche le message suivant :
Voulez-vous exécuter le logiciel de cet éditeur non approuvé ?
Le fichier <nom-fichier> est publié par CN=<nom-éditeur>
et n'est pas approuvé sur votre système. N'exécutez que des
scripts provenant d'éditeurs approuvés.
[m] Ne jamais exécuter [N] Ne pas exécuter [o] Exécuter une fois
[T] Toujours exécuter [?] Aide (la valeur par défaut est " N ") :
Si vous approuvez l'éditeur, sélectionnez " Exécuter une fois " ou
" Toujours exécuter ". Si vous n'approuvez pas l'éditeur,
sélectionnez soit " Ne jamais exécuter ", soit " Ne pas exécuter ".
Si vous sélectionnez " Ne jamais exécuter " ou " Toujours exécuter ",
Windows PowerShell ne vous invitera plus pour cet éditeur.
MÉTHODES DE SIGNATURE DE SCRIPTS
--------------------------
Vous pouvez signer les scripts que vous écrivez et les scripts qui
proviennent d'autres sources. Avant de signer un script, examinez
chaque commande afin de vérifier que son exécution ne présente pas
de risque.
Pour obtenir des informations sur les meilleures pratiques
relatives à la signature de code, consultez " Code-Signing Best
Practices " (en anglais) à l'adresse suivante :
http://go.microsoft.com/fwlink/?LinkId=119096.
Pour plus d'informations sur la façon de signer un fichier de script,
consultez Set-AuthenticodeSignature.
Pour ajouter une signature numérique à un script, vous devez le
signer à l'aide d'un certificat de signature de code. Deux types
de certificats sont appropriés pour signer un fichier de script :
-- Certificats créés par une autorité de certification
Moyennant une cotisation, une autorité de certification
publique vérifie votre identité et vous délivre un
certificat de signature de code. Lorsque vous achetez
votre certificat auprès d'une autorité de certification
approuvée, vous pouvez partager votre script avec des
utilisateurs disposant d'ordinateurs 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 général, vous utiliseriez uniquement un certificat auto-signé
pour signer des scripts que vous écrivez pour votre propre
utilisation et pour signer des scripts que vous obtenez d'autres
sources que vous savez sécurisées. Cette procédure n'est pas
adaptée aux scripts qui seront partagés, même au sein d'une
entreprise.
Si vous créez un certificat auto-signé, veillez à activer la
protection renforcée par clé privée sur votre certificat. Cela
empêche des programmes malveillants de signer des scripts en
votre nom. Les instructions sont fournies à la fin de cette rubrique.
CRÉER UN CERTIFICAT AUTO-SIGNÉ
--------------------------------
Pour créer un certificat auto-signé, utilisez l'outil Certificate
Creation tool (MakeCert.exe). Cet outil est inclus dans le Kit de
développement Microsoft .NET Framework SDK (versions 1.1 et
ultérieures) et dans le Kit de développement logiciel Microsoft
Windows SDK.
Pour plus d'informations sur la syntaxe et la description des
paramètres de l'outil MakeCert.exe, consultez la rubrique " Outil
Certificate Creation Tool (MakeCert.exe) " sur le site MSDN Library
(Microsoft Developer Network) à l'adresse
http://go.microsoft.com/fwlink/?LinkId=119097.
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 Kit de développement (SDK).
Remarque : la première commande crée une autorité de
certification locale pour votre ordinateur.
La deuxième génère un certificat personnel
provenant de l'autorité de certification.
Remarque : vous pouvez copier ou taper les commandes exactement
comme elles apparaissent. Aucune substitution n'est
nécessaire, bien que vous puissiez 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 que personne ne peut utiliser ou
accéder au certificat sans votre consentement. Créez et entrez un
mot de passe dont vous pouvez vous souvenir. 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 placer le certificat dans le magasin de
certificats sur l'ordinateur. (Vous ne trouverez pas de fichier
de certificat dans le répertoire de système de fichiers).
À l'invite de commandes de Windows PowerShell, tapez :
get-childitem cert:\CurrentUser\my -codesigning
Cette commande utilise le fournisseur Certificate de Windows
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
Empreinte numérique Objet
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]
SIGNER UN SCRIPT
----------------
Une fois que vous avez créé un certificat auto-signé, vous pouvez
signer des scripts. Si vous utilisez la stratégie d'exécution
AllSigned, signer un script vous autorise à 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.
Remarque : veillez à ce que le fichier de script n'ait pas
l'extension de nom de fichier .txt. Si votre éditeur de texte
ajoute " .txt ", placez le nom de fichier entre guillemets :
"add-signature.ps1".
## add-signature.ps1
## Signe un fichier
param([string] $file=$(throw "Spécifiez un nom de
fichier.")) $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 commandes de PowerShell :
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert
Après avoir signé le script, 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 Windows PowerShell requiert une
signature numérique d'une autorité approuvée. Si vous essayez, Windows
PowerShell affiche le message d'erreur suivant :
Impossible de charger le fichier C:\remote_file.ps1.
La signature du certificat ne peut pas être vérifiée.
À la ligne : 1 Caractère : 15
+ .\ remote_file.ps1 <<<<
Si Windows PowerShell affiche ce message lorsque vous exécutez un
script que vous n'avez pas écrit, traitez le fichier comme s'il
s'agissait d'un script non signé. Examinez le code pour
déterminer si vous pouvez approuver le script.
ACTIVER LA PROTECTION RENFORCÉE PAR CLÉ PRIVÉE POUR VOTRE CERTIFICAT
Si vous disposez sur votre ordinateur d'un certificat privé, des
programmes malveillants peuvent signer des scripts en votre nom,
ce qui autorise Windows PowerShell à les exécuter.
Pour empêcher la signature automatisée en votre nom, utilisez l'outil
Gestionnaire de certificats (Certmgr.exe) afin d'exporter votre
certificat de signature vers un fichier .pfx. Cet outil est fourni
avec le Kit de développement Microsoft .NET Framework SDK, le Kit de
développement Microsoft Windows SDK et Internet Explorer 5.0 et
versions ultérieures.
Pour exporter le certificat
1. Démarrez le gestionnaire de certificats.
2. Sélectionnez le certificat émis par la racine de certification
locale PowerShell (PowerShell Local Certificate Root).
3. Cliquez sur Exporter pour démarrer l'Assistant Exportation de
certificat.
4. Sélectionnez " Oui, exporter la clé privée ", puis cliquez
sur Suivant.
5. Sélectionnez " Activer la protection renforcée ".
6. Tapez un mot de passe une première fois, puis une seconde
fois pour confirmation.
7. Tapez un nom de fichier avec l'extension de nom de fichier .pfx.
8. Cliquez sur Terminer.
Pour importer à nouveau le certificat
1. Démarrez le gestionnaire de certificats.
2. Cliquez sur Importer pour démarrer l'Assistant Importation de certificat.
3. Accédez à l'emplacement du fichier .pfx que vous avez créé au cours de
l'exportation.
4. Dans la page Mot de passe, sélectionnez " Activer la protection
renforcée par clé privée ", puis entrez le mot de passe défini au cours
de l'exportation.
5. Sélectionnez le magasin de certificats Personnel.
6. Cliquez sur Terminer.
EMPÊCHER L'EXPIRATION DE LA SIGNATURE
-----------------------------------
La signature numérique dans un script est valide jusqu'à ce que le
certificat de signature expire ou tant qu'un serveur d'horodatage
peut vérifier que le script a été signé au cours de la durée de
validité du certificat de signature.
Étant donné que la durée de validité de la plupart des certificats de
signature est limitée à un an, l'utilisation d'un serveur d'horodatage
garantit que les utilisateurs pourront se servir de votre script pendant
de nombreuses années.
VOIR AUSSI
about_Execution_Policies
about_Profiles
Get-ExecutionPolicy
Set-ExecutionPolicy
Set-AuthenticodeSignature
" Introduction to Code Signing " (Introduction à la signature de code)
(http://go.microsoft.com/fwlink/?LinkId=106296) (en anglais)
Aucun commentaire:
Enregistrer un commentaire