PowerShell
Script di firma
Ricerca…
Osservazioni
La firma di uno script renderà gli script conformi a tutte le politiche di esecuzione in PowerShell e garantirà l'integrità di uno script. Gli script firmati non funzioneranno se sono stati modificati dopo la firma.
La firma degli script richiede un certificato di firma del codice. raccomandazioni:
- Script / test personali (non condivisi): certificato dell'autorità certificata fidata (interna o di terze parti) O certificato autofirmato.
- Organizzazione interna condivisa: certificato dell'autorità certificata fidata (interna o di terze parti)
- Organizzazione esterna condivisa: certificato dell'autorità certificata di terze parti attendibili
Maggiori informazioni su about_Signing @ TechNet
Politiche di esecuzione
PowerShell ha criteri di esecuzione configurabili che controllano quali condizioni sono richieste per lo script o la configurazione da eseguire. È possibile impostare una politica di escuzione per più ambiti; computer, utente corrente e processo corrente. Le politiche di esecuzione possono essere facilmente aggirate e non sono progettate per limitare gli utenti, ma piuttosto per proteggerli dalla violazione involontaria delle politiche di firma.
Le politiche disponibili sono:
Ambientazione | Descrizione |
---|---|
Limitato | Non sono consentiti script |
AllSigned | Tutti gli script devono essere firmati |
RemoteSigned | Sono consentiti tutti gli script locali; solo script remoti firmati |
illimitato | Nessun requisito. Tutti gli script sono consentiti, ma avviseranno prima di eseguire script scaricati da Internet |
Circonvallazione | Tutti gli script sono consentiti e non vengono visualizzati avvisi |
Non definito | Rimuovere la politica di esecuzione corrente per l'ambito corrente. Utilizza la politica padre. Se tutte le politiche non sono definite, verranno utilizzate restrizioni. |
È possibile modificare le politiche di esecuzione correnti utilizzando Set-ExecutionPolicy
-cmdlet, Criteri di gruppo o il parametro -ExecutionPolicy
quando si avvia un processo powershell.exe
.
Maggiori informazioni su about_Execution_Policies @ TechNet
Firma di uno script
La firma di uno script viene eseguita utilizzando Set-AuthenticodeSignature
-cmdlet e un certificato di firma del codice.
#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
È anche possibile leggere un certificato da un .pfx
-file utilizzando:
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
Lo script sarà valido fino alla scadenza del certificato. Se si utilizza un timestamp-server durante la firma, lo script continuerà ad essere valido dopo la scadenza del certificato. È anche utile aggiungere la catena di fiducia per il certificato (inclusa l'autorità di root) per aiutare la maggior parte dei computer a fidarsi del certificato utilizzato per firmare lo script.
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Si consiglia di utilizzare un timestamp-server di un fornitore di certificati attendibili come Verisign, Comodo, Thawte, ecc.
Modifica della politica di esecuzione tramite Set-ExecutionPolicy
Per modificare la politica di esecuzione per l'ambito predefinito (LocalMachine), utilizzare:
Set-ExecutionPolicy AllSigned
Per modificare la politica per un ambito specifico, utilizzare:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
È possibile sopprimere i prompt aggiungendo l' -Force
.
Bypassare i criteri di esecuzione per un singolo script
Spesso potrebbe essere necessario eseguire uno script non firmato che non è conforme al criterio di esecuzione corrente. Un modo semplice per farlo è aggirando la politica di esecuzione per quel singolo processo. Esempio:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
Oppure puoi usare la stenografia:
powershell -ep Bypass C:\MyUnsignedScript.ps1
Altre politiche di esecuzione:
Politica | Descrizione |
---|---|
AllSigned | È possibile eseguire solo script firmati da un editore attendibile. |
Bypass | Senza restrizioni; tutti gli script di Windows PowerShell possono essere eseguiti. |
Default | Normalmente RemoteSigned , ma è controllato tramite ActiveDirectory |
RemoteSigned | Gli script scaricati devono essere firmati da un editore fidato prima che possano essere eseguiti. |
Restricted | Non è possibile eseguire script. Windows PowerShell può essere utilizzato solo in modalità interattiva. |
Undefined | N / A |
Unrestricted * | Simile al bypass |
Unrestricted*
: se si esegue uno script senza firma scaricato da Internet, viene richiesta l'autorizzazione prima dell'esecuzione.
Ulteriori informazioni disponibili qui .
Ottieni la politica di esecuzione corrente
Ottenere la politica di esecuzione effettiva per la sessione corrente:
PS> Get-ExecutionPolicy
RemoteSigned
Elencare tutte le politiche di esecuzione efficaci per la sessione corrente:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Elencare la politica di esecuzione per un ambito specifico, ad es. processi:
PS> Get-ExecutionPolicy -Scope Process
Undefined
Ottenere la firma da uno script firmato
Ottieni informazioni sulla firma Authenticode da uno script firmato utilizzando Get-AuthenticodeSignature
cmdlet:
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
Creazione di un certificato di firma del codice autofirmato per il test
Quando si firmano script personali o si esegue il test della firma del codice, può essere utile creare un certificato di firma del codice autofirmato.
A partire da PowerShell 5.0 è possibile generare un certificato di firma del codice autofirmato utilizzando New-SelfSignedCertificate
cmdlet:
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
Nelle versioni precedenti, è possibile creare un certificato autofirmato utilizzando lo strumento makecert.exe
disponibile in .NET Framework SDK e Windows SDK.
Un certificato autofirmato sarà considerato affidabile solo dai computer che hanno installato il certificato. Per gli script che verranno condivisi, si consiglia un certificato da un'autorità di certificazione attendibile (interna o fidata di terze parti).