Assinando scripts

O script deve ser assinado por uma autoridade de confiança do console para ser importado ou executado pelo Security Controls. Todos os scripts fornecidos com o Security Controls são assinados pela Ivanti. Durante a instalação do Security Controls, o certificado Ivanti é adicionado ao repositório de certificados confiáveis ​​na máquina do console.

Você deve assinar os scripts criados antes de importá-los para o Security Controls. Para fazer isso, você precisa de um certificado de assinatura. Esse certificado deve ser emitido por uma autoridade que esteja na lista de confiança do(s) console(s) que executarão os scripts criados.

Esta seção descreverá uma maneira de criar o certificado de assinatura e adicioná-lo aos certificados confiáveis ​​no console.

Criando um certificado raiz capaz de emitir um certificado de assinatura de código

Esta etapa requer o uso de Windows 10 ou de Windows Server 2016 ou posterior.

Para criar um novo certificado raiz capaz de emitir um certificado de assinatura de código, use o seguinte comando.

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

Criando um certificado de assinatura

Esta etapa requer o uso de Windows 10 ou de Windows Server 2016 ou posterior.

A próxima etapa é criar o certificado de assinatura que é emitido pelo certificado raiz. Para fazer isso, digite o seguinte no prompt de comando:

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

Verificando o certificado de assinatura

Você pode verificar o certificado de dentro do PowerShell digitando o seguinte comando:

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

Se o certificado for encontrado, serão exibidos a impressão digital e o assunto dele, semelhante a isto:

Mova o certificado de assinatura para o repositório de certificados raiz confiáveis

Você deve mover o certificado de assinatura do repositório "My" para o repositório de certificados confiáveis "Root". Isso cria a cadeia de confiança do repositório raiz.

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

Assinando um script

Esta seção descreve como assinar um arquivo de script em um prompt do PowerShell ou no PowerShell ISE.

No prompt de comando do PowerShell, mude para o diretório que contém seu arquivo de script. Neste exemplo, ele é denominado test-script.ps1. Em seguida, digite os dois comandos a seguir:

O primeiro comando deve ser inserido em uma única linha. "CN=PowerShell User" deve corresponder ao nome que você especificou ao criar o certificado de assinatura.

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

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

O primeiro comando localizará o certificado no repositório de certificados. O segundo comando assina o script usando esse certificado.

Assinar o script adicionará, no final do script, um bloco semelhante a este:

# SIG # Begin signature block

# MIIEMwYJKoZIhvcNAQcCoIIEJDCCBCACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB

# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR

# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4QyppfQY+5HviH7wuIBvvmRf

……

# SIG # End signature block

Se você fizer alguma alteração no script, precisará assiná-lo novamente.

Assinar um script usando um arquivo PFX

Se quiser assinar scripts em várias máquinas usando o mesmo certificado de assinatura, mas sem instalar o certificado de assinatura em cada máquina, você pode usar um arquivo PFX (Personal Information Exchange, ou Troca de Informações Pessoais).

Para criar um arquivo PFX:

  1. Execute CertMgr.exe.
  2. Na guia Pessoal, selecione o certificado de assinatura.
  3. Clique em Exportar.
  4. Na primeira tela do assistente de exportação, clique em Avançar.
  5. Selecione a opção Troca de Informações Pessoais.
    Se houver uma opção Habilitar proteção forte, selecione-a.
  6. Digite uma senha quando solicitado.
    Ela será necessária ao usar o arquivo pfx para assinar scripts.
  7. Quando solicitado, digite um nome para o arquivo pfx.

Para assinar um script usando o arquivo PFX, insira os seguintes comandos no PowerShell:

$cert = Get-PfxCertificate mycert.pfx

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

Quando solicitado, forneça a senha que você criou na Etapa 6.