Set-AuthenticodeSignature
Adiciona uma assinatura Authenticode a um script do PowerShell ou outro arquivo.
Sintaxe
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-FilePath] <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-LiteralPath <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
-SourcePathOrExtension <String[]>
-Content <Byte[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
O Set-AuthenticodeSignature
cmdlet adiciona uma assinatura Authenticode a qualquer arquivo que dê suporte ao SIP (Pacote de Interface de Entidade).
Em um arquivo de script do PowerShell, a assinatura assume a forma de um bloco de texto que indica o fim das instruções executadas no script. Se houver uma assinatura no arquivo quando esse cmdlet é executado, essa assinatura será removida.
Exemplos
Exemplo 1 – Assinar um script usando um certificado do repositório de certificados local
Esses comandos recuperam um certificado de assinatura de código do provedor de certificados do PowerShell e o usam para assinar um script do PowerShell.
$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
FilePath = 'PsTestInternet2.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
O primeiro comando usa o Get-ChildItem
cmdlet e o provedor de certificados do PowerShell para obter os certificados no Cert:\CurrentUser\My
subdiretório do repositório de certificados. A Cert:
unidade é a unidade exposta pelo provedor de certificados. O parâmetro CodeSigningCert , que tem suporte apenas pelo provedor de certificados, limita os certificados recuperados àqueles com autoridade de assinatura de código. O comando armazena o resultado na $cert
variável.
O segundo comando define a $signingParameters
variável como um HashTable com os parâmetros para o Set-AuthenticodeSignature
cmdlet assinar o PSTestInternet2.ps1
script. Ele usa o parâmetro FilePath para especificar o nome do script, o parâmetro Certificate para especificar que o certificado está armazenado na $cert
variável e o parâmetro HashAlgorithm para definir o algoritmo de hash como SHA256.
O terceiro comando assina o script espalhando os parâmetros definidos em $signingParameters
.
Observação
Usar o parâmetro CodeSigningCert com Get-ChildItem
retorna apenas certificados que têm autoridade de assinatura de código e contêm uma chave privada. Se não houver chave privada, os certificados não poderão ser usados para assinatura.
Exemplo 2 – Assinar um script usando um certificado de um arquivo PFX
Esses comandos usam o Get-PfxCertificate
cmdlet para carregar um certificado de assinatura de código. Em seguida, use-o para assinar um script do PowerShell.
$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
FilePath = 'ServerProps.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters
O primeiro comando usa o Get-PfxCertificate
cmdlet para carregar o certificado C:\Test\MySign.pfx na $cert
variável.
O segundo comando define a $signingParameters
variável como um HashTable com os parâmetros para o Set-AuthenticodeSignature
cmdlet assinar o ServerProps.ps1
script. Ele usa o parâmetro FilePath para especificar o nome do script, o parâmetro Certificate para especificar que o certificado está armazenado na $cert
variável e o parâmetro HashAlgorithm para definir o algoritmo de hash como SHA256.
O terceiro comando assina o script espalhando os parâmetros definidos em $signingParameters
.
Se o arquivo de certificado estiver protegido por senha, o PowerShell solicitará a senha.
Exemplo 3 – Adicionar uma assinatura que inclua a autoridade raiz
Este comando adiciona uma assinatura digital que inclui a autoridade raiz da cadeia de confiança e é assinado por um servidor de carimbo de hora de terceiros.
$signingParameters = @{
FilePath = 'C:\scripts\Remodel.ps1'
Certificate = $cert
HashAlgorithm = 'SHA256'
IncludeChain = 'All'
TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters
O primeiro comando define a $signingParameters
variável como um HashTable com os parâmetros para o Set-AuthenticodeSignature
cmdlet assinar o script. Ele usa o parâmetro FilePath para especificar o caminho para o script, o parâmetro Certificate para especificar que o certificado está armazenado na $cert
variável e o parâmetro HashAlgorithm para definir o algoritmo de hash como SHA256. Ele usa o parâmetro IncludeChain para incluir todas as assinaturas na cadeia de confiança, incluindo a autoridade raiz. Ele também usa o parâmetro TimeStampServer para adicionar um carimbo de data/hora à assinatura. Isso impede que o script falhe quando o certificado expirar.
O segundo comando assina o script espalhando os parâmetros definidos em $signingParameters
.
Parâmetros
-Certificate
Especifica o certificado que será usado para assinar o script ou arquivo. Insira uma variável que armazena um objeto que representa o certificado ou uma expressão que obtém o certificado.
Para localizar um certificado, use Get-PfxCertificate
ou use o Get-ChildItem
cmdlet na unidade de certificado Cert:
. Se o certificado não for válido ou não tiver code-signing
autoridade, o comando falhará.
Tipo: | X509Certificate2 |
Cargo: | 1 |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Confirm
Solicita sua confirmação antes de executar o cmdlet.
Tipo: | SwitchParameter |
Aliases: | cf |
Cargo: | Named |
Valor padrão: | False |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Content
Esse parâmetro aparece na listagem de sintaxe porque é definido na classe base da qual Set-AuthenticodeSignature
é derivada. No entanto, o suporte para esse parâmetro não é implementado no Set-AuthenticodeSignature
.
Tipo: | Byte[] |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-FilePath
Especifica o caminho para um arquivo que está sendo assinado.
Tipo: | String[] |
Cargo: | 1 |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-Force
Permite ao cmdlet anexar informações de rastreamento a um arquivo somente leitura. Mesmo usando o parâmetro Force , o cmdlet não pode substituir as restrições de segurança.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | False |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-HashAlgorithm
Especifica o algoritmo de hash que o Windows usa para calcular a assinatura digital do arquivo.
O padrão é SHA1. Arquivos assinados com um algoritmo de hash diferente poderão não ser reconhecidos em outros sistemas. Os algoritmos suportados dependem da versão do sistema operacional.
Para obter uma lista de valores possíveis, consulte HashAlgorithmName Struct.
Tipo: | String |
Cargo: | Named |
Valor padrão: | Null |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-IncludeChain
Determina quais certificados na cadeia de confiança de certificados são incluídos na assinatura digital. NotRoot é o padrão.
Os valores válidos são:
- Signatário: Inclui apenas o certificado do signatário.
- NotRoot: inclui todos os certificados na cadeia de certificados, exceto a autoridade raiz.
- Todos: inclui todos os certificados na cadeia de certificados.
Tipo: | String |
Cargo: | Named |
Valor padrão: | NotRoot |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-LiteralPath
Especifica o caminho para um arquivo que está sendo assinado. Ao contrário de FilePath, o valor do parâmetro LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como caractere curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. As aspas simples informam ao PowerShell para não interpretar nenhum caractere como sequências de escape.
Tipo: | String[] |
Aliases: | PSPath |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-SourcePathOrExtension
Esse parâmetro aparece na listagem de sintaxe porque é definido na classe base da qual Set-AuthenticodeSignature
é derivada. No entanto, o suporte para esse parâmetro não é implementado no Set-AuthenticodeSignature
.
Tipo: | String[] |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-TimestampServer
Usa o servidor do carimbo de data e hora especificada para adicionar um carimbo de data na assinatura. Digite a URL do servidor de carimbo de data e hora como uma cadeia de caracteres.
O carimbo de data e hora representa a hora exata em que o certificado foi adicionado ao arquivo. Um carimbo de data e hora impede que o script falhe se o certificado expirar, pois usuários e programas podem verificar se o certificado era válido no momento da assinatura.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-WhatIf
Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.
Tipo: | SwitchParameter |
Aliases: | wi |
Cargo: | Named |
Valor padrão: | False |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Entradas
Você pode canalizar uma cadeia de caracteres que contém o caminho do arquivo para esse cmdlet.
Saídas
Esse cmdlet retorna um objeto Signature que representa o valor definido.