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)