Condividi tramite


about_Signing

Aggiornamento: novembre 2012

Si applica a: Windows PowerShell 2.0, Windows PowerShell 3.0

ARGOMENTO

about_Signing

DESCRIZIONE BREVE

Questo articolo illustra come firmare gli script in modo che siano conformi ai criteri di esecuzione di Windows PowerShell®.

DESCRIZIONE LUNGA

Il criterio di esecuzione Restricter non consente l'esecuzione di alcuno script. I criteri di esecuzione AllSigned e RemoteSigned impediscono a Windows PowerShell l'esecuzione di script senza firma digitale.

Questo argomento illustra come eseguire script selezionati non firmati, anche se il criterio di esecuzione è RemoteSigned, e come firmare gli script per uso personale.

Per altre informazioni sui criteri di esecuzione di Windows PowerShell, vedere about_Execution_Policy.

PER CONSENTIRE L'ESECUZIONE DI SCRIPT FIRMATI

Quando si avvia Windows PowerShell in un computer per la prima volta, è probabile che il criterio di esecuzione Restricted (il predefinito) sia attivo.

Il criterio Restricted non consente l'esecuzione di alcuno script.

Per trovare il criterio di esecuzione effettivo nel computer, digitare:

        Get-ExecutionPolicy

Per eseguire script non firmati scritti nel computer locale e script firmati da altri utenti, avviare Windows PowerShell con l'opzione Esegui come amministratore, quindi usare il comando seguente per modificare il criterio di esecuzione nel computer su RemoteSigned:

        Set-ExecutionPolicy RemoteSigned

Per altre informazioni, vedere l'argomento della Guida sul cmdlet Set-ExecutionPolicy.

ESECUZIONE DI SCRIPT NON FIRMATI (CRITERIO DI ESECUZIONE REMOTESIGNED)

Se il criterio di esecuzione Windows PowerShell è RemoteSigned, Windows PowerShell non eseguirà script non firmati scaricati da Internet, inclusi gli script non firmati ricevuti tramite posta elettronica e programmi di messaggistica immediata.

Se si tenta di eseguire uno script scaricato, Windows PowerShell mostra il messaggio di errore seguente:

        The file <file-name> cannot be loaded. The file 
        <file-name> is not digitally signed. The script
        will not execute on the system. Please see "Get-Help
        about_Signing" for more details.

Prima di eseguire lo script, esaminare il codice per verificare che sia attendibile. Gli script hanno lo stesso effetto di un programma eseguibile.

  • 1. Salvare il file di script nel computer in uso.

  • 2. Fare clic su Start, scegliere Computer, quindi individuare il file di script salvato.

  • 3. Fare clic con il pulsante destro del mouse sul file di script, quindi scegliere Proprietà.

  • 4. Fare clic su Sblocca.

Se uno script scaricato da Internet è dotato di firma digitale ma ancora non si è ancora certi che l'autore sia attendibile, Windows PowerShell mostra il messaggio seguente:

  • Eseguire software di questo autore non attendibile? Il file <file-name> è pubblicato da CN=<publisher-name>. L'autore non è considerato attendibile nel sistema. Eseguire solo script da autori attendibili.

  • [V] Non eseguire mai [D] Non eseguire [R] Esegui una volta [A] Esegui sempre [?] Guida (il valore predefinito è "D"):

  • Se si considera attendibile l'autore, selezionare "Esegui una volta" o "Esegui sempre". Se non si ritiene attendibile l'autore, selezionare "Non eseguire mai" o "Non eseguire". Se si seleziona "Non eseguire mai" o "Esegui sempre", Windows PowerShell non visualizzerà più il messaggio per questo autore.

METODI DI FIRMA DEGLI SCRIPT

È possibile firmare script scritti personalmente e script ottenuti da altre origini. Prima di firmare qualsiasi script, esaminare ogni comando per verificare che sia sicuro da eseguire.

Per le procedure consigliate sulla firma del codice, vedere "Procedure consigliate sulla firma del codice" all'indirizzo https://go.microsoft.com/fwlink/?LinkId=119096.

Per altre informazioni su come firmare un file di script, vedere Set-AuthenticodeSignature.

Il cmdlet New-SelfSignedCertificate, introdotto nel modulo PKI in Windows PowerShell 3.0, crea un certificato autofirmato appropriato per il test. Per altre informazioni, vedere l'argomento della Guida sul cmdlet New-SelfSignedCertificate.

Per aggiungere una firma digitale a uno script, è necessario firmarlo con un certificato di firma codice. Due tipi di certificati sono adatti per la firma di un file di script:

  • -- I certificati creati da un'autorità di certificazione:

    Dietro pagamento, un'autorità di certificazione pubblica verifica l'identità dell'utente e offre un certificato di firma codice. Quando si acquista il certificato da un'autorità di certificazione attendibile, si è in grado di condividere lo script con utenti in altri computer che eseguono Windows poiché tali altri computer considerano attendibile l'autorità di certificazione.

  • -- I certificati creati dall'utente:

    È possibile creare un certificato autofirmato per il quale il computer è l'autorità che crea il certificato. Questo certificato è gratuito e consente di scrivere, firmare ed eseguire gli script nel computer in uso. Tuttavia, uno script firmato da un certificato autofirmato non verrà eseguito in altri computer.

Generalmente, si userebbe un certificato autofirmato solo per firmare gli script scritti per uso personale e per firmare gli script ottenuti da altre origini di cui è stata accertata la sicurezza. Non è appropriato per gli script che verranno condivisi, anche all'interno dell'organizzazione.

Se si crea un certificato autofirmato, assicurarsi di abilitare la protezione avanzata con chiave privata nel certificato. Ciò impedisce che programmi dannosi firmino gli script per conto dell'utente. Le istruzioni sono incluse alla fine di questo argomento.

CREARE UN CERTIFICATO AUTOFIRMATO

Per creare un certificato autofirmato usare il cmdlet New-SelfSignedCertificate nel modulo PKI. Questo modulo è stato introdotto in Windows PowerShell 3.0 ed è incluso in Windows 8 e Windows Server 2012. Per altre informazioni, vedere l'argomento della Guida sul cmdlet New-SelfSignedCertificate.

Per creare un certificato autofirmato nelle versioni precedenti di Windows, usare lo strumento di creazione certificato (MakeCert.exe). Questo strumento è incluso in Microsoft .NET Framework SDK (versioni 1.1 e versioni successive) e in Microsoft Windows SDK.

Per altre informazioni sulla sintassi e sulle descrizioni dei parametri dello strumento MakeCert.exe, vedere "Strumento di creazione certificato (MakeCert.exe)" in MSDN (Microsoft Developer Network) Library all'indirizzo https://go.microsoft.com/fwlink/?LinkId=119097.

Per usare lo strumento MakeCert.exe per creare un certificato, eseguire i comandi seguenti in una finestra del prompt dei comandi di 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 i comandi esattamente come vengono visualizzati. Non sono necessarie sostituzioni, sebbene sia 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

Lo strumento MakeCert.exe richiederà una password chiave privata. La password garantisce che nessun altro possa accedere al certificato e usarlo senza il consenso dell'utente. Creare e immettere una password facile da ricordare. Si userà questa password in un secondo momento per recuperare il certificato.

Per verificare che il certificato è stato generato correttamente, usare il comando seguente per ottenere il certificato nell'archivio certificati del computer (non si troverà un file certificato nella directory file system).

Nel prompt di Windows PowerShell, digitare:

            get-childitem cert:\CurrentUser\my -codesigning

Questo comando usa il provider di certificati di Windows PowerShell per visualizzare informazioni sul certificato.

Se il certificato è stato creato, l'output mostra l'identificazione personale che identifica il certificato in una visualizzazione simile alla seguente:

        Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

        Thumbprint                                Subject
        ----------                                -------
        4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]

FIRMARE UNO SCRIPT

Dopo aver creato un certificato autofirmato, è possibile firmare gli script. Se si usa il criterio di esecuzione AllSigned, la firma di uno script consente di eseguire lo script nel computer in uso.

Il seguente script di esempio, Add-Signature.ps1, firma uno script. Tuttavia, se si usa il criterio di esecuzione AllSigned, è necessario firmare lo script Add-Signature.ps1 prima di eseguirlo.

Per usare questo script, copiare il testo seguente in un file di testo e denominarlo Add-Signature.ps1.

Nota: assicurarsi che il file di script non abbia l'estensione di file txt. Se nell'editor di testo viene aggiunto ".txt", racchiudere il nome del file tra virgolette: "add-signature.ps1".

            ## add-signature.ps1
            ## Signs a file
            param([string] $file=$(throw "Please specify a filename."))
            $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
            Set-AuthenticodeSignature $file $cert

Per firmare il file di script Add-Signature.ps1, digitare i comandi seguenti nel prompt dei comandi di Windows PowerShell:

        $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
    
        Set-AuthenticodeSignature add-signature.ps1 $cert

Dopo aver firmato lo script, è possibile eseguirlo nel computer locale. Tuttavia, lo script non verrà eseguito nei computer in cui il criterio di esecuzione di Windows PowerShell richiede una firma digitale da un'autorità attendibile. Se si tenta, Windows PowerShell mostra il messaggio di errore seguente:

        The file C:\remote_file.ps1 cannot be loaded. The signature of the 
        certificate cannot be verified.
        At line:1 char:15
        + .\ remote_file.ps1 <<<<

Se Windows PowerShell visualizza questo messaggio quando si esegue uno script non scritto personalmente, considerare il file come un qualsiasi script non firmato. Esaminare il codice per determinare se lo script è attendibile.

ABILITARE LA PROTEZIONE AVANZATA CHIAVE PRIVATA PER IL CERTIFICATO

Se si dispone di un certificato privato sul computer, i programmi dannosi potrebbero essere in grado di firmare gli script per conto dell'utente, autorizzando Windows PowerShell a eseguirli.

Per evitare la firma automatica per conto dell'utente, usare Gestione certificati (Certmgr.exe) per esportare il certificato di firma in un file con estensione pfx. Gestione certificati è incluso in Microsoft .NET Framework SDK, Microsoft Windows SDK e in Internet Explorer 5.0 e versioni successive.

Per esportare il certificato:

  • 1. Avviare Gestione certificati.

  • 2. Selezionare il certificato emesso da PowerShell Local Certificate Root.

  • 3. Fare clic su Esporta per avviare l'esportazione guidata certificati.

  • 4. Selezionare "Sì, esporta la chiave privata", quindi fare clic su Avanti.

  • 5. Selezionare "Abilita protezione avanzata".

  • 6. Digitare una password, quindi digitarla di nuovo per confermare.

  • 7. Digitare un nome di file con estensione pfx.

  • 8. Fare clic su Fine.

Per importare nuovamente il certificato:

  • 1. Avviare Gestione certificati.

  • 2. Fare clic su Importa per avviare l'importazione guidata certificati.

  • 3. Aprire il percorso del file con estensione 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 dei certificati personali.

  • 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 fino a quando un server di timestamp è in grado di verificare che lo script è stato firmato mentre il certificato di firma era valido.

Poiché la maggior parte dei certificati di firma sono validi per un solo anno, l'utilizzo di un server di timestamp garantisce che gli utenti possano usare lo script per molti anni a venire.

VEDERE ANCHE

about_Execution_Policies

about_Profiles

Get-ExecutionPolicy

New-SelfSignedCertificate

Set-ExecutionPolicy

Set-AuthenticodeSignature

"Introduzione alla firma del codice" (https://go.microsoft.com/fwlink/?LinkId=106296)