about_Signing

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)