ARGOMENTO
about_signing
DESCRIZIONE BREVE
Illustra come firmare gli script in modo che soddisfino i criteri di
esecuzione di Windows PowerShell.
DESCRIZIONE DETTAGLIATA
Il criterio di esecuzione Restricted non consente l'esecuzione di
script.
I criteri di esecuzione AllSigned e RemoteSigned impediscono a Windows
PowerShell di eseguire gli script che non presentano una firma digitale.
In questo argomento viene illustrato come eseguire script
selezionati non sono firmati, anche se il criterio di esecuzione è
RemoteSigned, e come firmare gli script per l'utilizzo.
Per ulteriori informazioni sui criteri di esecuzione di Windows
PowerShell, vedere about_Execution_Policy.
PER CONSENTIRE L'ESECUZIONE DI SCRIPT FIRMATI
-------------------------------
La prima volta che si avvia Windows PowerShell in un computer, è
probabilmente in uso il criterio di esecuzione Restricted (predefinito).
Il criterio di esecuzione Restricted non consente l'esecuzione di
alcuno script.
Per trovare il criterio di esecuzione in uso nel computer, digitare:
get-executionpolicy
Per eseguire gli script non firmati che si scrivono nel computer
locale e gli script firmati da altri utenti, utilizzare il
comando seguente per impostare il criterio di esecuzione nel
computer su RemoteSigned:
set-executionpolicy remotesigned
Per ulteriori informazioni, vedere Set-ExecutionPolicy.
ESECUZIONE DI SCRIPT NON FORMATI (CRITERIO DI ESECUZIONE REMOTESIGNED)
-------------------------------------------------------------
Se il criterio di esecuzione di Windows PowerShell è
RemoteSigned, in Windows PowerShell non verranno eseguiti gli script
non firmati scaricati da Internet, inclusi gli script non firmati
ricevuti tramite i programmi di posta elettronica e di messaggistica
immediata.
Se si tenta di eseguire uno script scaricato, viene visualizzato
il seguente messaggio di errore:
Impossibile caricare il file <nome-file>. Il file
<nome-file> non è firmato digitalmente. Lo script
non verrà eseguito nel sistema. Per ulteriori informazioni,
vedere "Get-Help about_signing".
Prima di eseguire lo script, rivedere il codice per assicurarsi
che sia attendibile.
Gli script hanno lo stesso effetto di qualsiasi programma eseguibile.
Per eseguire uno script non firmato:
1. Salvare il file script nel computer.
2. Fare clic sul pulsante Start, scegliere Risorse del computer e individuare
il file script salvato.
3. Fare clic con il pulsante destro del mouse sul file script e scegliere Proprietà.
4. Fare clic su Sblocca.
Se uno script scaricato da Internet è firmato digitalmente, ma
non si è ancora scelto di considerarne attendibile l'autore, viene
visualizzato il seguente messaggio:
Eseguire software di questo autore non attendibile? Il file
<nome-file> è pubblicato da CN=<nome-autore>. e non è considerato
attendibile nel sistema in uso. Eseguire solo script creati da autori
attendibili.
[V] Non eseguire mai [D] Non eseguire [R] Esegui una volta
[A] Esegui sempre [?] Guida (l'opzione predefinita è "D"):
Se si considera attendibile l'autore, selezionare "Esegui una
volta" o "Esegui sempre". Se non si considera attendibile
l'autore, selezionare "Non eseguire mai" o "Non eseguire". Se si
seleziona "Non eseguire mai" o "Non eseguire, non verranno più
visualizzati prompt per questo autore.
METODI DI FIRMA DEGLI SCRIPT
--------------------------
È possibile firmare gli script creati e ottenuti da altre fonti.
Prima di firmare uno script, esaminare ogni comando e verificare
che possa essere eseguito senza alcun rischio.
Per informazioni sulle procedure consigliate per la firma del
codice, vedere l-articolo relativo all'indirizzo
https://go.microsoft.com/fwlink/?LinkId=119096 (le informazioni
potrebbero essere in lingua inglese).
Per ulteriori informazioni su come firmare un file script, vedere Set-
AuthenticodeSignature.
Per aggiungere una firma digitale a uno script, è necessario
firmarlo con un certificato per la firma del codice. Esistono due
tipi di certificati utilizzabili per la firma di un file script:
-- Certificati creati da un'autorità di certificazione:
Dietro pagamento di una commissione, un'autorità di
certificazione pubblica verifica l'identità dell'utente e
gli assegna un certificato per la firma del codice.
Acquistando un certificato da un'autorità di
certificazione affidabile, si sarà in grado di condividere
lo script con utenti di altri computer Windows, dal momento che
l'autorità di certificazione verrà considerata disponibile negli
elenchi locali di tali computer.
-- Certificati creati dall'utente:
È possibile creare un certificato autofirmato, per il quale il
computer dell'utente è l'autorità che crea il certificato.
Questo certificato è gratuito e consente di scrivere,
firmare ed eseguire script nel computer. Tuttavia, uno
script firmato da un certificato autofirmato non verrà
eseguito in altri computer.
In genere, si utilizza un certificato autofirmato solo per
firmare script che si scrivono per il proprio utilizzo e script che si
ottengono dalle altre origini di cui è stata verificata
l'attendibilità. Non è adatto per script che devono essere condivisi,
neanche all'interno di un'azienda.
Se si crea un certificato autofirmato, assicurarsi di abilitare
la protezione avanzata chiave privata nel certificato. In questo
modo si impedirà che gli script vengano firmati per conto dell'utente
mediante programmi dannosi. Le istruzioni per abilitare la protezione
avanzata chiave privata sono fornite al termine di questo argomento.
CREAZIONE DI UN CERTIFICATO AUTOFIRMATO
--------------------------------
Per creare un certificato autofirmato, utilizzare lo strumento di
creazione certificati (MakeCert.exe). Questo strumento è incluso in
Microsoft .NET Framework SDK (versioni 1.1 e successive) e in
Microsoft Windows SDK.
Per ulteriori informazioni sulla sintassi e le descrizioni dei
parametri dello strumento MakeCert.exe, vedere "Strumento di creazione
certificati (MakeCert.exe)" in MSDN Library all'indirizzo
https://go.microsoft.com/fwlink/?LinkId=119097.
Per utilizzare lo strumento MakeCert.exe per creare un
certificato, eseguire i comandi seguenti in una finestra del
prompt dei comandi SDK.
Nota: il primo comando crea un'autorità di certificazione locale
per il computer. Il secondo comando genera un certificato personale
dall'autorità di certificazione.
Nota: è possibile copiare o digitare esattamente i comandi come
vengono visualizzati.
Non è necessaria alcuna sostituzione, anche se è possibile
modificare il nome del certificato.
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
Verrà richiesta una password per la chiave privata. La password
garantisce che nessuno possa utilizzare o accedere al certificato
senza il consenso dell'autore. Creare e immettere una password
che si possa ricordare. Questa password verrà utilizzata
successivamente per recuperare il certificato.
Per verificare che il certificato sia stato generato correttamente,
utilizzare il comando seguente per ottenere il certificato nell'archivio
certificati del computer (il file del certificato non si troverà
nella directory del file system).
Al prompt di Windows PowerShell, digitare:
get-childitem cert:\CurrentUser\my -codesigning
Mediante questo comando viene utilizzato il provider di certificati di
Windows PowerShell per visualizzare informazioni sul certificato.
Se il certificato è stato creato, l'output mostra l'identificazion
e digitale che identifica il certificato in una visualizzazione
analoga alla seguente:
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- ---------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]
FIRMA DI UNO SCRIPT
-------------
Se si crea un certificato autofirmato, è possibile firmare gli
script. Se si utilizza il criterio di esecuzione AllSigned, la
firma di uno script ne consente l'esecuzione sul computer
dell'utente.
Lo script di esempio seguente, Add-Signature.ps1, firma uno script. Se
tuttavia si sta utilizzando il criterio di esecuzione AllSigned, è
necessario firmare lo script Add-Signature.ps1 prima di eseguirlo.
Per utilizzare questo script, copiare il testo seguente in un
file di testo e assegnarvi il nome Add-Signature.ps1.
Nota: assicurarsi che il file script non abbia estensione txt. Se
nell'editor di testo il file viene salvato con estensione ".txt",
racchiudere il nome file tra virgolette: "add-signature.ps1".
## add-signature.ps1
## Firma un file
param([string] $file=$(throw "Specificare un nome
file.")) $cert = @(Get-ChildItem cert:\CurrentUser\My
-codesigning)[0] Set-AuthenticodeSignature $file $cert
Per firmare il file script Add-Signature.ps1, digitare i comandi
seguenti al prompt dei comandi di Windows PowerShell:
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert
Dopo che lo script è stato firmato, è possibile eseguirlo sul
computer locale.
Tuttavia, non verrà eseguito nei computer in cui il criterio di
esecuzione di Windows PowerShell richiede una firma digitale di
un'autorità certificata. Se si tenta, il comando ha esito
negativo e viene visualizzato il messaggio di errore seguente:
Impossibile caricare il file C:\remote_file.ps1. Impossibile
verificare la firma del certificato.
At line:1 char:15
+ .\ remote_file.ps1 <<<<
Se viene visualizzato questo messaggio quando si esegue uno script
proveniente da un altro autore, considerare il file come un qualsiasi
script non firmato. Rivedere il codice per determinare se lo script è
attendibile.
ABILITAZIONE DELLA PROTEZIONE AVANZATA CHIAVE PRIVATA PER IL CERTIFICATO
Se nel computer è installato un certificato privato, esiste il
rischio che programmi dannosi consentano la firma di script per conto
dell'utente e, conseguentemente, l'esecuzione d tali script in
Windows PowerShell.
Per impedire la firma automatica di script per conto dell'utente,
utilizzare lo strumento di gestione certificati (Certmgr.exe) per
esportare il certificato per la firma in un file pfx. Lo strumento di
gestione certificati è incluso in Microsoft .NET Framework SDK,
Microsoft Windows SDK e Internet Explorer 5.0 e versioni successive.
Per esportare il certificato:
1. Avviare lo strumento di gestione certificati.
2. Selezionare il certificato emesso da PowerShell Local
Certificate Root.
3. Scegliere Esporta per avviare l'Esportazione guidata
certificati.
4. Scegliere "Esporta la chiave privata", quindi scegliere Avanti.
5. Selezionare "Abilita protezione avanzata".
6. Digitare una password, quindi digitarla nuovamente per
confermare.
7. Digitare un nome file con estensione pfx.
8. Fare clic su Fine.
Per reimportare il certificato:
1. Avviare lo strumento di gestione certificati.
2. Scegliere Importa per avviare l'Importazione guidata
certificati.
3. Aprire il percorso del file pfx creato durante il processo di
esportazione.
4. Nella pagina "Password" selezionare "Abilita protezione
avanzata chiave privata", quindi immettere la password
assegnata durante il processo di esportazione.
5. Selezionare l'archivio certificati Personale.
6. Fare clic su Fine.
IMPEDIRE LA SCADENZA DELLA FIRMA
-----------------------------------
La firma digitale in uno script è valida fino alla scadenza del
certificato di firma o finché un server di timestamp può
verificare che lo script è stato firmato mentre il certificato
di firma era valido.
Poiché la maggior parte dei certificati di firma sono validi
solo per un anno, l'utilizzo di un server di timestamp assicura
che gli utenti possano utilizzare lo script per molti anni.
VEDERE ANCHE
about_Execution_Policies
about_Profiles
Get-ExecutionPolicy
Set-ExecutionPolicy
Set-AuthenticodeSignature
"Introduction to Code Signing" (https://go.microsoft.com/fwlink/?Li
nkId=106296)