TÓPICO
    about_signing

DESCRIÇÃO RESUMIDA
    Explica como assinar scripts em conformidade com as diretivas de 
    execução do Windows PowerShell.

DESCRIÇÃO LONGA
    A diretiva de execução Restricted não permite a execução de scripts.
    As diretivas de execução AllSigned e RemoteSigned impedem o Windows 
    PowerShell de executar scripts sem uma assinatura digital.

    Este tópico explica como executar scripts selecionados não 
    assinados, até mesmo com a diretiva de execução RemoteSigned, e 
    como assinar scripts para seu próprio uso.
    
    Para obter mais informações sobre as diretivas de execução do Windows 
    PowerShell, consulte about_Execution_Policy.


 PARA PERMITIR A EXECUÇÃO DE SCRIPTS ASSINADOS
 -------------------------------
    Quando você inicia o Windows PowerShell pela primeira vez em um 
    computador, é provável que a diretiva de execução Restricted 
    (padrão) esteja em vigor.

    A diretiva Restricted não permite a execução de scripts.

    Para determinar qual a diretiva de execução em vigor no seu computador, digite:

        get-executionpolicy

    Para executar scripts não assinados gravados por você no seu 
    computador local e scripts assinados de outros usuários, use o 
    comando a seguir para alterar a diretiva de execução no 
    computador para RemoteSigned: 

	set-executionpolicy remotesigned

    Para obter mais informações, consulte Set-ExecutionPolicy.  


 EXECUTANDO SCRIPTS NÃO ASSINADOS (DIRETIVA DE EXECUÇÃO REMOTESIGNED) 
 -------------------------------
    Se a sua diretiva de execução do Windows PowerShell for 
    RemoteSigned, o Windows PowerShell não executará scripts sem 
    assinatura baixados da Internet, inclusive os recebidos por 
    programas de email e de mensagens instantâneas.

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

        O arquivo <nome_do_arquivo> não pode ser carregado. O arquivo 
        < nome_do_arquivo > não está digitalmente assinado. O script
        não será executado no sistema. Consulte "Get-Help 
        about_signing" para obter mais detalhes.

    Antes de executar o script, revise o código para ter certeza de que ele é confiável.
    Os scripts têm o mesmo efeito de qualquer programa executável.

    Para executar um script sem assinatura:

        1. Salve o arquivo do script no seu computador. 
        2. Clique em Iniciar, em Meu Computador, e localize o arquivo do script salvo. 
        3. Clique com o botão direito do mouse no arquivo do script, e então clique em Propriedades.
        4. Clique em Desbloquear.

    Se um script baixado da Internet tiver uma assinatura digital, 
    mas você ainda não tiver definido seu fornecedor como confiável, 
    o Windows PowerShell exibirá a seguinte mensagem:

        Deseja executar o software deste fornecedor não confiável? O 
        arquivo <nome_do_arquivo> foi publicado por CN=<nome_do_fornec
        edor>. Esse fornecedor não é confiável em seu sistema. 
        Execute somente scripts de fornecedores confiáveis.

        [U] Nunca executar [N] Não executar [R] Executar uma vez [A] 
        Sempre executar [?] Ajuda (o padrão é "N"):
    
        Se você confiar no fornecedor, selecione "Executar uma vez" 
        ou "Sempre executar". Se você não confiar no fornecedor, 
        selecione "Nunca executar" ou "Não executar". Se você 
        selecionar "Nunca executar" ou "Sempre executar", o Windows 
        PowerShell não perguntará novamente sobre esse fornecedor.
    

 MÉTODOS DE ASSINATURA DE SCRIPTS
 --------------------------
    Você pode assinar os scripts gravados por você e obtidos de 
    outras fontes. Antes de assinar qualquer script, examine cada 
    comando para verificar se a sua execução é segura.

    Para obter as práticas recomendadas de assinatura de código, 
    consulte "Code-Signing Best Practices" em 
    https://go.microsoft.com/fwlink/?LinkId=119096. 

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

    Para adicionar uma assinatura digital a um script, você deverá 
    assiná-lo com um certificado de assinatura de código. Há dois tipos de 
    certificados apropriados para a assinatura de um arquivo de script: 

        -- Os certificados criados por uma autoridade certificadora:

           Por uma taxa, a autoridade certificadora pública verifica sua 
           identidade e confere a você um certificado de assinatura de código. 
           Quando adquire o seu certificado de uma autoridade certificadora 
           respeitável, você é capaz de compartilhar seu script com usuários de 
           outros computadores que tenham Windows, já que eles confiam na autoridade certificadora.

        -- Os certificados criados por você:

           Você pode criar um certificado autoassinado, para o qual o seu 
           computador será a autoridade criadora.
           Esse certificado é gratuito e o habilita a gravar, assinar 
           e executar scripts no seu computador. No entanto, um 
           script com um certificado autoassinado não será executado 
           em outros computadores. 

    Normalmente, você só usaria um certificado autoassinado para 
    assinar scripts gravados para seu próprio uso e scripts obtidos 
    de fontes cuja confiabilidade foi verificada. Isso não seria 
    adequado para scripts compartilhados, até mesmo dentro de uma empresa.

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


 CRIAR UM CERTIFICADO AUTOASSINADO
 --------------------------------
    Para criar um certificado autoassinado, 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âmetros da ferramenta MakeCert.exe, consulte "A ferramenta de 
    criação de certificado (Makecert.exe)" na biblioteca do MSDN 
    (Microsoft Developer Network), em 
    https://go.microsoft.com/fwlink/?LinkId=119097.  

    Para usar a ferramenta MakeCert.exe para criar um certificado, 
    execute os comandos a seguir em uma janela do prompt de comando 
    do SDK. 
 
    Observação: o primeiro comando cria uma autoridade certificadora 
                local em seu computador. O segundo gera um certificado pessoal a 
                partir da autoridade certificadora. 

    Observação: você pode copiar ou digitar os comandos exatamente 
                como aparecem.
                Nenhuma substituição é necessária, 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 assegura que ninguém possa usar ou acessar o certificado 
    sem seu consentimento. Crie e digite uma senha da qual você se 
    lembre. Você usará essa senha posteriormente para recuperar o 
    certificado.

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

    No prompt do Windows PowerShell, digite:

            get-childitem cert:\CurrentUser\my -codesigning

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

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


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

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


 ASSINE UM SCRIPT
 -------------

    Depois de criar um certificado autoassinado, você poderá assinar 
    scripts. Se você usa a diretiva de execução AllSigned, a 
    assinatura de um script permite executar scripts em seu computador. 

    O script de exemplo a seguir, Add-Signature.ps1, assina um 
    script. No entanto, se você estiver usando a diretiva de execução 
    AllSigned, deverá assinar o script Add-Signature.ps1 antes de 
    executá-lo.

    Para usar esse script, copie o texto a seguir para um arquivo de 
    texto e nomeie-o como Add-Signature.ps1.

    Observação: verifique se o arquivo de script não possui uma 
                extensão de nome de arquivo .txt. Se o seu editor de texto anexar 
                ".txt", coloque o nome do arquivo entre aspas: "add-signature.ps1".


            ## add-signature.ps1
            ## Assina um arquivo
            param([string] $file=$(throw "Especifique um nome de 
            arquivo.")) $cert = @(Get-ChildItem cert:\CurrentUser\My -
            codesigning)[0] Set-AuthenticodeSignature $file $cert


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

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


    Após a assinatura do script, você poderá executá-lo no computador local.
    Entretanto, o script não será executado nos computadores onde a 
    diretiva de execução do Windows PowerShell solicitar uma 
    assinatura digital de uma autoridade confiável. Caso você tente, 
    o Windows PowerShell exibirá a seguinte mensagem de erro:

        O arquivo C:\remote_file.ps1 não pode ser carregado. A 
        assinatura do certificado não pode ser verificada.
        At line:1 char:15
        + .\ remote_file.ps1 <<<<

    Se o Windows PowerShell exibir essa mensagem quando você executar 
    um script que não tenha sido gravado por você, trate-o como 
    trataria qualquer script não assinado. Revise o código para 
    determinar se pode confiar no script.


 HABILITE A PROTEÇÃO DE CHAVE PRIVADA FORTE PARA O SEU CERTIFICADO 
 ---------------------------------------
    
    Se você possui um certificado particular em seu computador, os 
    programas mal-intencionados podem ser capazes de assinar scripts 
    em seu nome, autorizando o Windows PowerShell a executá-los. 

    Para impedir a assinatura automática em seu nome, utilize o 
    Gerenciador de Certificados (Certmgr.exe) para exportar o seu 
    certificado de assinatura para um arquivo .pfx. O Gerenciador de 
    Certificados faz parte do SDK do Microsoft .NET Framework, do SDK do 
    Microsoft Windows e do Internet Explorer 5.0 e versões posteriores.

    Para exportar o certificado:

        1. Inicie o Gerenciador de Certificados.
    
        2. Selecione o certificado emitido por PowerShell Local Certificate Root.

        3. Clique em Exportar para iniciar o Assistente para Exportação de Certificados.

        4. Selecione "Sim, exportar a chave privada" e clique em Avançar.
    
        5. Selecione "Ativar proteção de alta segurança".

        6. Digite uma senha, e depois digite-a novamente para confirmá-la.

        7. Digite um nome de arquivo com a extensão .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 Importação de Certificados.

        3. Abra o local onde está o arquivo .pfx criado no processo de exportação.

        4. Na página Senha, selecione "Ativar proteção de alta 
           segurança para chaves privadas", e depois digite a senha atribuída 
           durante o processo de exportação.

        5. Selecione o repositório de certificados Pessoal.

        6. Clique em Concluir.



 IMPEDIR A EXPIRAÇÃO DA ASSINATURA 
 -----------------------------------
     A assinatura digital em um script é válida até que o certificado de 
     autenticação expire ou contanto que um servidor de carimbo de 
     data/hora possa verificar que o script foi assinado enquanto o 
     certificado de autenticação era válido. 

     Como a maioria dos certificados de autenticação só é válida 
     durante um ano, o uso de um servidor de carimbo de data/hora 
     assegura que os usuários possam usar seu script por muitos anos. 


CONSULTE TAMBÉM
    about_Execution_Policies
    about_Profiles
    Get-ExecutionPolicy
    Set-ExecutionPolicy
    Set-AuthenticodeSignature
    "Introduction to Code Signing" (https://go.microsoft.com/fwlink/?Li
    nkId=106296)




Sumário