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)