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 . Le 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 est publié par CN= 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)