Firma di script

Uno script deve essere firmato da un'autorità con relazione di trust da parte della console al fine di essere importato o eseguito da Security Controls. Tutti gli script forniti con Security Controls sono firmati da Ivanti. Durante l'installazione di Security Controls, il certificato Ivanti viene aggiunto all'archivio certificati attendibili sul computer della console.

È necessario firmare script che si creano prima della loro importazione in Security Controls. A tal fine, è richiesto un certificato di firma. Tale certificato deve essere emesso da un'autorità inclusa nell'elenco delle autorità attendibili per le console che eseguiranno gli script creati.

Questa sezione descriverà un modo di creare un certificato di firma e di aggiungerlo ai certificati considerati attendibili sulla console.

Creazione di un certificato radice in grado di emettere un certificato di firma del codice

Questo passaggio richiede l'uso di Windows 10 o Windows Server 2016 o versione successiva.

Per creare un nuovo certificato radice capace di emettere un certificato di firma del codice, usare il comando seguente.

PS C:\> $signerRoot = New-SelfSignedCertificate -Subject "CN=PowerShell Local Certificate Root2" -HashAlgorithm Sha256 -CertStoreLocation Cert:\LocalMachine\My -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyUsageProperty None -KeyUsage None

Creazione di un certificato di firma

Questo passaggio richiede l'uso di Windows 10 o Windows Server 2016 o versione successiva.

Il passaggio successivo consiste nel creare un certificato di firma emesso dal certificato radice. A tal fine, inserire quanto segue nel prompt dei comandi:

PS C:\> $powershellSignerSigner = New-SelfSignedCertificate -Subject "CN=PowerShell User" -HashAlgorithm Sha256 -CertStoreLocation Cert:\LocalMachine\My -Signer $signerRoot -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyUsageProperty None -KeyUsage None

Verifica del certificato di firma

È possibile verificare il certificato dall'interno di PowerShell inserendo il seguente comando:

Get-ChildItem cert:\LocalMachine\My -codesigning | Where-Object {$_.Subject -match "CN=PowerShell User"}

Se viene rilevato il certificato, verranno visualizzati l'identificazione personale e il soggetto del certificato, in modo simile a questo:

Spostamento del certificato di firma nell'archivio certificati radice attendibili

È necessario spostare il certificato di firma dall'archivio certificati "Personale" all'archivio certificati "Radice" attendibili. In questo modo si genera la catena di certificati nell'archivio radice.

PS C:\> Move-Item -Path "Cert:\LocalMachine\My\$($signerRoot.Thumbprint)" -Destination Cert:\LocalMachine\Root

Firma di uno script

Questa sezione descriverà come firmare un file di script da un prompt PowerShell o dall'interno di PowerShell ISE.

Dal prompt dei comandi PowerShell, passare alla directory contenente il proprio file di script. In questo esempio, è denominato test-script.ps1. Inserire quindi i due comandi seguenti:

Il primo comando deve essere inserito su una riga singola. L'utente CN=PowerShell deve corrispondere al nome specificato al momento di creare il certificato di firma.

$cert = @(Get-ChildItem cert:\LocalMachine\My -codesigning | Where-Object {$_.Subject -match "CN=PowerShell User"})[0]

Set-AuthenticodeSignature .\test-script.ps1 $cert

Il primo comando localizzerà il certificato nell'archivio certificati. Il secondo comando firma lo script usando tale certificato.

La firma dello script aggiungerà un blocco al termine dello script che risulta simile a questo:

# SIG # Inizio blocco firma

# MIIEMwYJKoZIhvcNAQcCoIIEJDCCBCACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB

# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR

# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4QyppfQY+5HviH7wuIBvvmRf

……

# SIG # Fine blocco firma

Se si effettuano modifiche allo script, sarà necessario ripetere l'accesso.

Firma di uno script usando un file PFX

Se si desidera firmare degli script usando lo stesso certificato di firma su più computer, senza installare il certificato di firma su ciascun computer, è possibile usare un file PFX (Personal Information Exchange).

Per creare un file PFX:

  1. Eseguire CertMgr.exe.
  2. Sulla scheda Personale, selezionare il certificato di firma.
  3. Fare clic su Esporta.
  4. Sulla prima schermata della procedura guidata di esportazione, fare clic su Avanti.
  5. Selezionare l'opzione Personal Information Exchange.
    Se è presente un'opzione Abilita protezione robusta, sceglierla.
  6. Inserire una password laddove richiesto.
    Sarà necessaria al momento di usare questo file pfx per firmare gli script.
  7. Laddove richiesto, digitare un nome per il file pfx.

Per firmare uno script usando il file PFX, inserire i seguenti comandi in PowerShell:

$cert = Get-PfxCertificate mycert.pfx

Set-AuthenticodeSignature .\test-script.ps1 $cert

Laddove richiesto, fornire la password creata al punto 6.