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)