about_Signing

Mis à jour: mai 2014

S'applique à: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

RUBRIQUE

about_Signing

DESCRIPTION COURTE

Explique comment signer des scripts afin qu'ils se conforment aux stratégies d'exécution Windows PowerShell®.

DESCRIPTION DÉTAILLÉE

La stratégie d'exécution Restricted n'autorise pas l'exécution de scripts. Les stratégies d'exécution AllSigned et RemoteSigned empêchent Windows PowerShell d'exécuter des scripts qui n'ont pas une signature numérique.

Cette rubrique explique comment exécuter des scripts sélectionnés non 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 Windows PowerShell, consultez about_Execution_Policy.

POUR AUTORISER L'EXÉCUTION DE SCRIPTS SIGNÉS

Lorsque vous démarrez Windows PowerShell sur un ordinateur pour la première fois, il est probable que la stratégie d'exécution Restricted (valeur par défaut) s'applique.

La stratégie d'exécution Restricted n'autorise pas l'exécution de scripts.

Pour rechercher la stratégie d'exécution effective sur votre ordinateur, tapez :

        Get-ExecutionPolicy

Pour exécuter les scripts non signés que vous écrivez sur votre ordinateur local et les scripts signés des autres utilisateurs, démarrez Windows PowerShell avec l'option Exécuter en tant qu'administrateur, puis 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 la rubrique d'aide pour l'applet de commande 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écute pas les scripts non signés qui sont téléchargés à partir d'Internet, y compris les scripts non signés que vous recevez par courrier électronique et par les programmes de messagerie instantanée.

Si vous essayez d'exécuter un script téléchargé, Windows 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, examinez le code pour vous assurer que vous lui faites confiance. Les scripts ont le même effet que tout programme exécutable.

  • 1. Enregistrez le fichier de script sur votre ordinateur.

  • 2. Cliquez sur Démarrer, sur Ordinateur et recherchez 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é depuis 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>. Cet éditeur n'est pas approuvé sur votre système. N'exécutez que les scripts d'éditeurs approuvés.

  • [V] Ne jamais exécuter [D] Ne pas exécuter [R] Exécuter une seule fois [A] Toujours exécuter [?] Aide (valeur par défaut, « D ») :

  • Si vous approuvez l'éditeur, sélectionnez « Exécuter une fois » ou « Toujours exécuter ». Si vous n'approuvez pas 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 », Windows PowerShell ne vous proposera plus d'invite pour cet éditeur.

MÉTHODES DE SIGNATURE DES SCRIPTS

Vous pouvez signer les scripts que vous écrivez et les scripts que vous obtenez d'autres sources. Avant de signer un script, examinez chaque commande afin de vérifier qu'elle peut être exécutée en toute sécurité.

Pour obtenir les meilleures pratiques sur la signature de code, consultez « Meilleures pratiques de signature de code » à l'adresse https://go.microsoft.com/fwlink/?LinkId=119096.

Pour plus d'informations sur la signature d'un fichier de script, consultez Set-AuthenticodeSignature.

L'applet de commande New-SelfSignedCertificate, introduite dans le module PKI de Windows PowerShell 3.0, crée un certificat auto-signé qui est approprié pour le test. 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 du code. Deux types de certificats sont adaptés pour la signature d'un fichier de script :

  • -- Les certificats créés par une autorité de certification :

    Pour un paiement, 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 digne de confiance, vous pouvez partager votre script avec les utilisateurs d'autres ordinateurs qui exécutent Windows, car ces autres ordinateurs approuvent l'autorité de certification.

  • -- Les 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écute pas sur d'autres ordinateurs.

En général, vous n'utilisez un certificat auto-signé que pour signer des scripts que vous écrivez pour votre propre usage et pour signer des scripts que vous obtenez d'autres sources que vous avez vérifiées à des fins de sécurité. Il ne convient pas pour les scripts qui sont 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 les programmes malveillants de signer des scripts en votre nom. Les instructions sont incluses à la fin de cette rubrique.

CRÉER UN CERTIFICAT AUTO-SIGNÉ

Pour créer un certificat auto-signé à utiliser dans l'applet de commande New-SelfSignedCertificate du module PKI. Ce module est introduit dans Windows 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 Kit de développement logiciel 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 les descriptions des paramètres de l'outil MakeCert.exe, consultez « Outil de création de certificat (MakeCert.exe) » dans la bibliothèque MSDN (Microsoft Developer Network) à l'adresse https://go.microsoft.com/fwlink/?LinkId=119097.

Pour utiliser l'outil MakeCert.exe et 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 telles qu'elles apparaissent. Aucune substitution n'est nécessaire, mais 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 demande un mot de passe de clé privée. Le mot de passe garantit que personne ne peut utiliser le certificat ou y accéder 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 afin d'obtenir le certificat dans le magasin de certificats sur l'ordinateur. (Vous ne trouverez pas de fichier de certificat dans le répertoire du système de fichiers.)

À l'invite Windows PowerShell, tapez :

            get-childitem cert:\CurrentUser\my -codesigning

Cette commande utilise le fournisseur de certificats 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 semblable au suivant :

        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. Cependant, 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 : Assurez-vous que le fichier de script n'a pas d'extension de nom de fichier .txt. Si votre éditeur de texte ajoute « .txt », placez le nom du fichier entre guillemets : "add-signature.ps1".

            ## 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 commandes Windows PowerShell :

        $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
    
        Set-AuthenticodeSignature add-signature.ps1 $cert

Une fois que le script est signé, vous pouvez l'exécuter sur l'ordinateur local. Cependant, le script ne s'exécutera pas sur les ordinateurs où la stratégie d'exécution Windows PowerShell nécessite une signature numérique d'une autorité approuvée. Si vous essayez, Windows 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 Windows PowerShell affiche ce message lorsque vous exécutez un script que vous n'avez pas écrit, traitez le fichier comme vous traiteriez un script non signé. Examinez le code pour déterminer si vous pouvez faire confiance au script.

ACTIVER LA PROTECTION RENFORCÉE PAR CLÉ PRIVÉE POUR VOTRE CERTIFICAT

Si vous avez un certificat privé sur votre ordinateur, des programmes malveillants peuvent être en mesure de signer des scripts en votre nom, ce qui autorise Windows 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 vers un fichier .pfx. Le Gestionnaire de certificats est inclus dans le Kit de développement Microsoft .NET Framework SDK, le Kit de développement Microsoft Windows SDK et dans 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.

  • 3. Cliquez sur Exporter pour lancer 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, puis tapez-le à nouveau pour confirmer.

  • 7. Tapez un nom de fichier ayant l'extension de nom de fichier .pfx.

  • 8. Cliquez sur Terminer.

Pour importer de nouveau le certificat :

  • 1. Démarrez le Gestionnaire de certificats.

  • 2. Cliquez sur Importer pour démarrer l'Assistant Importation de certificat.

  • 3. Ouvrez à l'emplacement du fichier .pfx que vous avez créé au cours du processus d'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 que vous avez attribué pendant le processus d'exportation.

  • 5. Sélectionnez le magasin de certificats personnels.

  • 6. Cliquez sur Terminer.

EMPÊCHER L'EXPIRATION DE LA SIGNATURE

La signature numérique d'un script est valide jusqu'à ce que le certificat de signature expire ou aussi longtemps qu'un serveur d'horodatage peut vérifier que le script a été signé pendant que le certificat de signature était valide.

Comme la plupart des certificats de signature ne sont valides que pour une année, l'utilisation d'un serveur d'horodatage garantit que les utilisateurs peuvent utiliser votre script pendant encore de nombreuses années.

VOIR AUSSI

about_Execution_Policies

about_Profiles

Get-ExecutionPolicy.

New-SelfSignedCertificate

Set-ExecutionPolicy

Set-AuthenticodeSignature

« Introduction à la signature du code » (https://go.microsoft.com/fwlink/?LinkId=106296)