PowerShell
Scripts de signature
Recherche…
Remarques
La signature d'un script fera en sorte que vos scripts soient conformes à toutes les stratégies d'exécution dans PowerShell et garantissent l'intégrité d'un script. Les scripts signés ne seront pas exécutés s'ils ont été modifiés après leur signature.
La signature de scripts nécessite un certificat de signature de code. Recommandations:
- Scripts / tests personnels (non partagés): Certificat d'une autorité de certification certifiée (interne ou tierce partie) OU un certificat auto-signé.
- Organisation interne partagée: Certificat de l'autorité de certification certifiée (interne ou tierce)
- Organisation externe partagée: Certificat émanant d'une autorité de certification tierce de confiance
En savoir plus sur about_Signing @ TechNet
Politiques d'exécution
PowerShell dispose de stratégies d'exécution configurables qui contrôlent les conditions requises pour l'exécution d'un script ou d'une configuration. Une politique d'exécution peut être définie pour plusieurs portées. ordinateur, utilisateur actuel et processus en cours. Les stratégies d'exécution peuvent facilement être ignorées et ne sont pas conçues pour restreindre les utilisateurs, mais plutôt pour les protéger contre la violation involontaire de stratégies de signature.
Les politiques disponibles sont les suivantes:
Réglage | La description |
---|---|
Limité | Aucun script autorisé |
AllSigned | Tous les scripts doivent être signés |
RemoteSigned | Tous les scripts locaux autorisés; uniquement des scripts distants signés |
Libre | Aucune exigence Tous les scripts sont autorisés, mais avertiront avant d'exécuter des scripts téléchargés à partir d'Internet |
Contourne | Tous les scripts sont autorisés et aucun avertissement n'est affiché |
Indéfini | Supprimez la stratégie d'exécution en cours pour l'étendue actuelle. Utilise la politique parent. Si toutes les règles sont indéfinies, la restriction sera utilisée. |
Vous pouvez modifier les stratégies d'exécution en cours à l'aide du Set-ExecutionPolicy
-cmdlet, Group Policy ou -ExecutionPolicy
lors du lancement d'un processus powershell.exe
.
En savoir plus sur about_Execution_Policies @ TechNet
Signer un script
La signature d'un script s'effectue à l'aide de la cmdlet Set-AuthenticodeSignature
et d'un certificat de signature de code.
#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1
Vous pouvez également lire un certificat à partir d'un .pfx
.pfx en utilisant:
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
Le script sera valide jusqu'à l'expiration du certificat. Si vous utilisez un serveur d'horodatage lors de la signature, le script continuera à être valide après l'expiration du certificat. Il est également utile d'ajouter la chaîne d'approbation du certificat (y compris l'autorité racine) pour aider la plupart des ordinateurs à faire confiance au certificat utilisé pour signer le script.
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Il est recommandé d'utiliser un serveur d'horodatage auprès d'un fournisseur de certificats de confiance tel que Verisign, Comodo, Thawte, etc.
Modification de la stratégie d'exécution à l'aide de Set-ExecutionPolicy
Pour modifier la stratégie d'exécution de la portée par défaut (LocalMachine), utilisez:
Set-ExecutionPolicy AllSigned
Pour modifier la stratégie pour une portée spécifique, utilisez:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
Vous pouvez supprimer les invites en ajoutant le commutateur -Force
.
Contournement de la politique d'exécution pour un seul script
Vous devrez souvent exécuter un script non signé qui ne respecte pas la stratégie d'exécution en cours. Un moyen simple de le faire est de contourner la stratégie d'exécution pour ce processus unique. Exemple:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
Ou vous pouvez utiliser la sténographie:
powershell -ep Bypass C:\MyUnsignedScript.ps1
Autres politiques d'exécution:
Politique | La description |
---|---|
AllSigned | Seuls les scripts signés par un éditeur approuvé peuvent être exécutés. |
Bypass | Pas de restrictions; tous les scripts Windows PowerShell peuvent être exécutés. |
Default | Normalement RemoteSigned , mais est contrôlé via ActiveDirectory |
RemoteSigned | Les scripts téléchargés doivent être signés par un éditeur approuvé avant de pouvoir être exécutés. |
Restricted | Aucun script ne peut être exécuté. Windows PowerShell ne peut être utilisé qu'en mode interactif. |
Undefined | N / A |
Unrestricted * | Similaire à bypass |
Unrestricted*
Avertissement: Si vous exécutez un script non signé qui a été téléchargé depuis Internet, vous êtes invité à en demander l'autorisation avant de l'exécuter.
Plus d'informations disponibles ici .
Obtenir la politique d'exécution actuelle
Obtenir la politique d'exécution effective pour la session en cours:
PS> Get-ExecutionPolicy
RemoteSigned
Énumérer toutes les politiques d'exécution efficaces pour la session en cours:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Énumérer la politique d'exécution pour une portée spécifique, ex. processus:
PS> Get-ExecutionPolicy -Scope Process
Undefined
Obtenir la signature d'un script signé
Obtenez des informations sur la signature Authenticode à partir d'un script signé à l'aide de la cmdlet Get-AuthenticodeSignature
:
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
Création d'un certificat de signature de code auto-signé pour le test
Lors de la signature de scripts personnels ou lors du test de signature de code, il peut être utile de créer un certificat de signature de code auto-signé.
À partir de PowerShell 5.0, vous pouvez générer un certificat de signature de code auto-signé à l'aide de la New-SelfSignedCertificate
SelfSignedCertificate:
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
Dans les versions antérieures, vous pouvez créer un certificat auto-signé à l'aide de l'outil makecert.exe
situé dans le Kit de développement .NET Framework SDK et Windows SDK.
Un certificat auto-signé ne sera approuvé que par les ordinateurs sur lesquels le certificat a été installé. Pour les scripts qui seront partagés, un certificat provenant d'une autorité de certification approuvée (interne ou tiers de confiance) est recommandé.