Comment créer et exécuter des scripts PowerShell Auto-Signés

Par défaut et pour des raisons de sécurité il n'est pas possible d'exécuter des scripts PowerShell. Évidement, il est possible d'utiliser l'option -ExecutionPolicy Bypass mais si l'on souhaite améliorer la securité il peut être interessant de savoir comment n'autoriser que les scripts préalablement signés. Nous allons voir ici comment créer et n'autoriser que les scripts signés.

GPO pour autoriser uniquement les scripts signés

Windows | exécuter gpedit.msc GPO | Stratégies Windows PowerShell GPO | stratégie Activer l'exécution des scripts

Création du certificat

Pour signer nos scripts nous avons besoin d'un certificat. Nous allons voir ici comment en créer un auto-signé.

PowerShell | Ouvrir une console PowerShell en tant qu'administrateur
PS C:\Users\Administrator\Desktop> $CertificateName = "STD Certificate"
PS C:\Users\Administrator\Desktop> $OutPutPFXFilePath = "C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx"
PS C:\Users\Administrator\Desktop> $MyStrongPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
PS C:\Users\Administrator\Desktop> New-SelfSignedCertificate -subject $CertificateName -Type CodeSigning -NotAfter (Get-Date).AddYears(10) -KeyLength 4096 | Export-PfxCertificate -FilePath $OutPutPFXFilePath -password $MyStrongPassword

Signer le script

PS C:\Users\Administrator\Desktop> $MyCertFromPfx = Get-PfxCertificate -FilePath 'C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx'
Enter password : ********
PS C:\Users\Administrator\Desktop> Set-AuthenticodeSignature -PSPath 'C:\Users\administrator\Desktop\script.ps1' -Certificate $MyCertFromPfx
PowerShell | Signer un script avec la commande Set-AuthenticodeSignature

Importer le Certificat

Pour être correctement reconnu, le certificat auto-signé à besoin d'être importé sur les ordinateurs sur lesquels nous voulons exécuter nos scripts PowerShell. Il faudra donc entrer les commandes suivants avec les droits administrateurs sur les machines cibles.

Définir les variables

PS C:\Users\Administrator\Desktop> $MyStrongPassword = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
PS C:\Users\Administrator\Desktop> $CertPath = "C:\Users\administrator\Desktop\MyNewSigningCertificate.pfx"

Importer vers le magasin Autorités de certification racines de confiance

PS C:\Users\Administrator\Desktop> Import-PfxCertificate -FilePath $CertPath "cert:\LocalMachine\Root" -Password $MyStrongPassword
PowerShell | import vers le magasin Autorités de certification racines de confiance

Importer vers le magasin Éditeurs approuvés

PS C:\Users\Administrator\Desktop> Import-PfxCertificate -FilePath $CertPath "cert:\LocalMachine\TrustedPublisher" -Password $MyStrongPassword
PowerShell | import vers le magasin Autorités de certification racines de confiance

Vérifier la signature

PS C:\Users\Administrator\Desktop> Get-AuthenticodeSignature 'C:\Users\administrator\Desktop\script.ps1'
PowerShell | Vérifier si le script est correctement signé avec Get-AuthenticodeSignature PowerShell | Le fichier ne peut être chargé.

Références

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :