about_Signing

Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0

TÓPICO

about_Signing

DESCRIÇÃO BREVE

Explica como assinar scripts, de forma que estejam em conformidade com as políticas de execução do Windows PowerShell®.

DESCRIÇÃO LONGA

A política de execução restrita não permite que os scripts sejam executados. As políticas de execução AllSigned e RemoteSigned evitam que o Windows PowerShell execute scripts que não têm uma assinatura digital.

Este tópico explica como executar scripts selecionados que não estão assinados, mesmo quando a política de execução é RemoteSigned, e como assinar scripts para seu próprio uso.

Para obter mais informações sobre as políticas de execução do Windows PowerShell, consulte about_Execution_Policy.

COMO PERMITIR QUE SCRIPTS ASSINADOS SEJAM EXECUTADOS

Quando você inicia o Windows PowerShell em um computador pela primeira vez, a política de execução restrita (o padrão) provavelmente estará em vigor.

A política restrita não permite que os scripts sejam executados.

Para localizar a política de execução efetiva em seu computador, digite:

        Get-ExecutionPolicy

Para executar scripts não assinados que você escreve em seu computador local e scripts assinados de outros usuários, inicie o Windows PowerShell com a opção Executar como administrador e, em seguida, use o comando a seguir para alterar a política de execução no computador para RemoteSigned:

        Set-ExecutionPolicy RemoteSigned

Para obter mais informações, consulte o tópico de ajuda para o cmdlet Set-ExecutionPolicy.

EXECUÇÃO DE SCRIPTS NÃO ASSINADOS (POLÍTICA DE EXECUÇÃO REMOTESIGNED)

Se sua política de execução do Windows PowerShell é RemoteSigned, o Windows PowerShell não executará scripts não assinados que são baixados da Internet, incluindo scripts não assinados que você recebe por email e mensagens instantâneas e programas.

Se você tentar executar um script baixado, o Windows PowerShell exibe a seguinte mensagem de erro:

        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.

Antes de executar o script, examine o código para se certificar de que você confia nele. Scripts têm o mesmo efeito que qualquer programa executável.

  • 1. Salve o arquivo de script no seu computador.

  • 2. Clique em Iniciar, Meu computador e localize o arquivo de script salvo.

  • 3. Clique com o botão direito do mouse no arquivo de script e, em seguida, clique em Propriedades.

  • 4. Clique em Desbloquear.

Se um script que foi baixado da Internet é assinado digitalmente, mas você ainda não optou por confiar no editor, o Windows PowerShell exibe a seguinte mensagem:

  • Você deseja executar o software desse fornecedor não confiável? O arquivo <file-name> é publicado pelo CN=<publisher-name>. Este editor não é confiável em seu sistema. Somente execute scripts de editores confiáveis.

  • [V] Nunca executar [D] Não executar [R] Executar uma vez [A] Sempre executar [?] Ajuda (o padrão é "D"):

  • Se você confia no fornecedor, selecione "Executar uma vez" ou "Sempre executar". Se você não confia no editor, selecione "Nunca executar" ou "Não executar". Se você selecionar "Nunca executar" ou "Sempre executar", o Windows PowerShell não solicitará novamente esse editor.

MÉTODOS DE ASSINATURA DE SCRIPTS

Você pode assinar os scripts que você escreve e os scripts obtidos de outras fontes. Antes de assinar qualquer script, examine cada comando para verificar se é seguro para execução.

Para obter práticas recomendadas sobre a assinatura de código, consulte "Práticas recomendadas assinatura de código" em https://go.microsoft.com/fwlink/?LinkId=119096.

Para obter mais informações sobre como assinar um arquivo de script, consulte Set-AuthenticodeSignature.

O cmdlet New-SelfSignedCertificate, introduzido no módulo PKI em Windows PowerShell 3.0, cria um certificado autoassinado que é apropriado para teste. Para obter mais informações, consulte o tópico de ajuda para o cmdlet New-SelfSignedCertificate.

Para adicionar uma assinatura digital a um script, você deve assinar com um certificado de assinatura de código. Dois tipos de certificados são adequados para assinar um arquivo de script:

  • -- Certificados que são criados por uma autoridade de certificação:

    Mediante uma taxa, uma autoridade de certificação pública verifica sua identidade e oferece um certificado de assinatura de código. Ao comprar o certificado de uma autoridade de certificação confiável, é possível compartilhar seu script com usuários em outros computadores que estão executando o Windows, pois esses outros computadores confiam na autoridade de certificação.

  • -- Certificados criados por você:

    Você pode criar um certificado autoassinado para o qual o computador é a autoridade que cria o certificado. Esse certificado é gratuito e permite que você escreva, assine e execute scripts em seu computador. No entanto, um script assinado por um certificado autoassinado não será executado em outros computadores.

Normalmente, você usaria um certificado autoassinado somente para assinar scripts que você escreve para seu próprio uso e scripts de logon que você obtém de outras fontes que você verificou a segurança. Isso não é apropriado para os scripts que serão compartilhados, mesmo dentro de uma empresa.

Se você criar um certificado autoassinado, certifique-se de habilitar a proteção forte de chave privada no seu certificado. Isso impede que programas mal-intencionados assinem scripts em seu nome. As instruções estão incluídas no final deste tópico.

CRIAR UM CERTIFICADO AUTOASSINADO

Para criar um certificado autoassinado, use o cmdlet New-SelfSignedCertificate no módulo PKI. Esse módulo é apresentado no Windows PowerShell 3.0 e está incluído no Windows 8 e Windows Server 2012. Para obter mais informações, consulte o tópico de ajuda para o cmdlet New-SelfSignedCertificate.

Para criar um certificado autoassinado em versões anteriores do Windows, use a ferramenta de criação de certificado (MakeCert.exe). Essa ferramenta está incluída no SDK do Microsoft .NET Framework (versões 1.1 e posteriores) e no SDK do Microsoft Windows.

Para obter mais informações sobre a sintaxe e as descrições de parâmetro da ferramenta MakeCert.exe, consulte "Ferramenta de criação de certificado (MakeCert.exe)" na biblioteca MSDN (Microsoft Developer Network) em https://go.microsoft.com/fwlink/?LinkId=119097.

Para usar a ferramenta MakeCert.exe para criar um certificado, execute os seguintes comandos em uma janela de prompt de comando do SDK.

Observação: O primeiro comando cria uma autoridade de certificação local para seu computador. O segundo comando gera um certificado pessoal da autoridade de certificação.

Observação: Você pode copiar ou digitar os comandos exatamente como aparecem. Substituições não são necessárias, embora você possa alterar o nome do certificado.

            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

A ferramenta MakeCert.exe solicitará uma senha de chave privada. A senha garante que ninguém pode usar ou acessar o certificado sem o seu consentimento. Crie e insira uma senha que você possa se lembrar. Você usará essa senha posteriormente para recuperar o certificado.

Para verificar se o certificado foi gerado corretamente, use o seguinte comando para obter o certificado no repositório de certificados no computador. (Você não encontrará um arquivo de certificado no diretório de sistema de arquivos.)

No prompt do Windows PowerShell, digite:

            get-childitem cert:\CurrentUser\my -codesigning

Este comando usa o provedor de certificados do Windows PowerShell para exibir informações sobre o certificado.

Se o certificado foi criado, a saída mostra a impressão digital que identifica o certificado em uma exibição semelhante à seguinte:

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

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

ASSINAR UM SCRIPT

Depois de criar um certificado autoassinado, é possível assinar scripts. Se você usar a política de execução AllSigned, assinar um script permite que você execute o script em seu computador.

O seguinte script de exemplo, Add-Signature.ps1, assina um script. No entanto, se você estiver usando a política de execução AllSigned, você deve assinar o script Add-Signature.ps1 antes de executá-lo.

Para usar esse script, copie o seguinte texto em um arquivo de texto e nomeie-o como Add-Signature.ps1.

Observação: Certifique-se de que o arquivo de script não tenha uma extensão de nome de arquivo .txt. Se o seu editor de texto acrescenta ".txt", coloque o nome do arquivo entre aspas: "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

Para assinar o arquivo de script Add-Signature.ps1, digite os seguintes comandos no prompt de comando do Windows PowerShell:

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

Depois que o script é assinado, você pode executá-lo no computador local. No entanto, o script não será executado em computadores nos quais a política de execução do Windows PowerShell exige uma assinatura digital de uma autoridade confiável. Se você tentar, o Windows PowerShell exibirá a seguinte mensagem de erro:

        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 exibir esta mensagem quando você executar um script que você não escreveu, trate o arquivo como você trataria qualquer script não assinado. Examine o código para determinar se você pode confiar no script.

HABILITE A PROTEÇÃO DE CHAVE PRIVADA FORTE PARA O CERTIFICADO

Se você tiver um certificado privado em seu computador, programas mal-intencionados poderão assinar scripts em seu nome, que autoriza o Windows PowerShell a executá-los.

Para evitar assinatura automatizada em seu nome, use o Gerenciador de certificados (Certmgr.exe) para exportar o certificado de assinatura para um arquivo .pfx. O Gerenciador de certificados está incluído no Microsoft .NET Framework SDK, no Microsoft Windows SDK e no Internet Explorer 5.0 e versões posteriores.

Para exportar o certificado:

  • 1. Inicie o Gerenciador de certificados.

  • 2. Selecione o certificado emitido pela raiz de certificado local do PowerShell.

  • 3. Clique em Exportar para iniciar o Assistente para exportação de certificados.

  • 4. Selecione "Sim, exportar a chave privada" e, em seguida, clique em Avançar.

  • 5. Selecione "Habilitar proteção de alta segurança".

  • 6. Digite uma senha e, em seguida, digite-a novamente para confirmá-la.

  • 7. Digite um nome de arquivo que tem a extensão de nome de arquivo .pfx.

  • 8. Clique em Concluir.

Para importar o certificado novamente:

  • 1. Inicie o Gerenciador de certificados.

  • 2. Clique em Importar para iniciar o Assistente para exportação de certificados.

  • 3. Abra o local do arquivo .pfx criado durante o processo de exportação.

  • 4. Na página Senha, selecione "Habilitar proteção forte de chave privada" e, em seguida, digite a senha atribuída durante o processo de exportação.

  • 5. Selecione o repositório de certificados pessoal.

  • 6. Clique em Concluir.

IMPEDIR QUE A ASSINATURA EXPIRE

A assinatura digital em um script é válida até que o certificado de assinatura expire ou desde que o servidor de carimbo de data/hora possa verificar se o script foi assinado durante a validade do certificado de assinatura.

Como a maioria dos certificados de assinatura são válidos por apenas um ano, usar um servidor de carimbo de data/hora garante que os usuários possam usar o script por muitos anos.

CONSULTE TAMBÉM

about_Execution_Policies

about_Profiles

Get-ExecutionPolicy

New-SelfSignedCertificate

Set-ExecutionPolicy

Set-AuthenticodeSignature

"Introdução à assinatura de código" (https://go.microsoft.com/fwlink/?LinkId=106296)