Signature de scripts

Un script doit être signé par une autorité à laquelle la console fait confiance pour que vous puissiez l'importer ou l'exécuter dans Security Controls. Tous les scripts fournis avec Security Controls sont signés par Ivanti. Au cours de l'installation de Security Controls, le certificat Ivanti est ajouté au magasin de certificats de confiance sur la machine de console.

Vous devez signer les scripts que vous créez avant de les importer dans Security Controls. Pour ce faire, vous avez besoin d'un certificat de signature. Ce certificat doit être émis par une autorité figurant dans la liste De confiance de la ou des consoles qui vont exécuter les scripts que vous créez.

Cette section présente l'une des méthodes permettant de créer un certificat de signature et de l'ajouter aux certificats de confiance sur la console.

Création d'un certificat racine capable d'émettre un certificat de signature de code

Cette étape nécessite l'utilisation de Windows 10, ou de Windows Server 2016 ou supérieur.

Pour créer un nouveau certificat racine capable d'émettre un certificat de signature de code, utilisez la commande suivante.

PS C:\> $signerRoot = New-SelfSignedCertificate -Subject "CN=PowerShell Local Certificate Root2" -HashAlgorithm Sha256 -CertStoreLocation Cert:\LocalMachine\My -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyUsageProperty None -KeyUsage None

Création d'un certificat de signature

Cette étape nécessite l'utilisation de Windows 10, ou de Windows Server 2016 ou supérieur.

L'étape suivante consiste à créer un certificat de signature émis par le certificat racine. Pour ce faire, entrez ce qui suit à l'invite de commande :

PS C:\> $powershellSignerSigner = New-SelfSignedCertificate -Subject "CN=PowerShell User" -HashAlgorithm Sha256 -CertStoreLocation Cert:\LocalMachine\My -Signer $signerRoot -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyUsageProperty None -KeyUsage None

Vérification du certificat de signature

Vous pouvez vérifier le certificat depuis PowerShell en entrant la commande suivante :

Get-ChildItem cert:\LocalMachine\My -codesigning | Where-Object {$_.Subject -match "CN=PowerShell User"}

Si le certificat est trouvé, la vignette et le sujet du certificat s'affichent, comme suit :

Déplacement du certificat de signature vers le magasin de certificats racines de confiance

Vous devez déplacer le certificat de signature de « Mon » magasin de certificats vers le magasin de certificats « Racine » de confiance. Cela met en place la chaîne de confiance avec le magasin racine.

PS C:\> Move-Item -Path "Cert:\LocalMachine\My\$($signerRoot.Thumbprint)" -Destination Cert:\LocalMachine\Root

Signature d'un script

Cette section explique comment signer un fichier de script depuis l'invite PowerShell ou dans PowerShell ISE.

À l'invite de commande PowerShell, changez de répertoire pour accéder à celui qui contient votre fichier de script. Dans notre exemple, il s'agit de test-script.ps1. Entrez ensuite les deux commandes suivantes :

La première commande doit être entrée sur une seule ligne. Le nom CN=PowerShell User doit correspondre au nom que vous avez spécifié lors de la création du certificat de signature.

$cert = @(Get-ChildItem cert:\LocalMachine\My -codesigning | Where-Object {$_.Subject -match "CN=PowerShell User"})[0]

Set-AuthenticodeSignature .\test-script.ps1 $cert

La première commande repère le certificat dans le magasin de certificats. La deuxième commande signe le script à l'aide de ce certificat.

La signature du script ajoute un bloc à la fin du script, semblable à ceci :

# SIG # Début du bloc de signature

# MIIEMwYJKoZIhvcNAQcCoIIEJDCCBCACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB

# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR

# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4QyppfQY+5HviH7wuIBvvmRf

……

# SIG # Fin du bloc de signature

Si vous modifiez le script, vous devrez le signer de nouveau.

Signature d'un script avec un fichier PXF

Si vous souhaitez signer les scripts en utilisant le même certificat de signature sur plusieurs machines sans installer ce certificat sur chaque machine, vous pouvez utiliser un fichier PFX (Personal Information Exchange - Échange d'informations personnelles).

Pour créer un fichier PFX :

  1. Exécutez CertMgr.exe.
  2. Dans l'onglet Personnel, sélectionnez le certificat de signature.
  3. Cliquez sur Exporter.
  4. Dans le premier écran de l'assistant d'exportation, cliquez sur Suivant.
  5. Sélectionnez l'option Échange d'informations personnelles.
    Si l'option Activer la protection renforcée est disponible, sélectionnez-la.
  6. Entrez un mot de passe quand le système vous y invite.
    Il sera nécessaire lorsque vous utiliserez ce fichier PFX pour signer des scripts.
  7. À l'invite, attribuez un nom au fichier PFX.

Pour signer un script avec ce fichier PFX, entrez les commandes suivantes dans PowerShell :

$cert = Get-PfxCertificate mycert.pfx

Set-AuthenticodeSignature .\test-script.ps1 $cert

À l'invite, entrez le mot de passe créé à l'étape 6.