Set-AuthenticodeSignature

Adiciona uma assinatura authenticode a um script do PowerShell ou outro arquivo.

Syntax

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 Assunto).

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
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert

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 para aqueles com autoridade de assinatura de código. O comando armazena o resultado na $cert variável.

O segundo comando usa o Set-AuthenticodeSignature cmdlet para assinar o PSTestInternet2.ps1 script. Ele usa o parâmetro FilePath para especificar o nome do script e o parâmetro Certificado para especificar que o certificado é armazenado na $cert variável.

Observação

Usar o parâmetro CodeSigningCert com Get-ChildItem apenas retorna certificados que têm autoridade de assinatura de código e contêm uma chave privada. Se não houver nenhuma 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
Set-AuthenticodeSignature -FilePath ServerProps.ps1 -Certificate $cert

O primeiro comando usa o Get-PfxCertificate cmdlet para carregar o certificado C:\Test\MySign.pfx na $cert variável.

O segundo comando usa Set-AuthenticodeSignature para assinar o script. O parâmetro Set-AuthenticodeSignatureFilePath especifica o caminho para o arquivo de script que está sendo assinado e o parâmetro Cert passa a $cert variável que contém o certificado para Set-AuthenticodeSignature.

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.

Set-AuthenticodeSignature -FilePath c:\scripts\Remodel.ps1 -Certificate $cert -IncludeChain All -TimestampServer "http://timestamp.fabrikam.com/scripts/timstamper.dll"

O comando usa o parâmetro FilePath para especificar o script que está sendo assinado e o parâmetro Certificado para especificar o certificado salvo na $cert variável. 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.

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 certificado Cert: . Se o certificado não for válido ou não tiver code-signing autoridade, o comando falhará.

Type:X509Certificate2
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Solicita sua confirmação antes de executar o cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Content

Conteúdo de um arquivo como uma matriz de bytes para a qual a assinatura digital é adicionada. Esse parâmetro deve ser usado com o parâmetro SourcePathOrExtension . O conteúdo do arquivo deve estar no formato Unicode (UTF-16LE).

Type:Byte[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-FilePath

Especifica o caminho para um arquivo que está sendo assinado.

Type:String[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HashAlgorithm

Especifica o algoritmo de hash que o Windows usa para calcular a assinatura digital do arquivo.

Para o PowerShell 3.0, o padrão é SHA256, que é o algoritmo de hash padrão do Windows. Para o PowerShell 2.0, o padrão é SHA1. Arquivos assinados com um algoritmo de hash diferente poderão não ser reconhecidos em outros sistemas. Quais algoritmos têm suporte dependem da versão do sistema operacional.

Para obter uma lista de valores possíveis, consulte HashAlgorithmName Struct.

Type:String
Position:Named
Default value:SHA256
Required:False
Accept pipeline input:False
Accept wildcard characters: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 para a autoridade raiz.
  • Tudo: inclui todos os certificados na cadeia de certificados.
Type:String
Position:Named
Default value:NotRoot
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Especifica o caminho para um arquivo que está sendo assinado. Ao contrário do FilePath, o valor do parâmetro LiteralPath é usado exatamente como ele é digitado. Nenhum caractere é interpretado como caractere curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. As aspas simples dizem ao PowerShell para não interpretar nenhum caractere como sequências de escape.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-SourcePathOrExtension

Caminho para o arquivo ou tipo de arquivo do conteúdo para o qual a assinatura digital é adicionada. Esse parâmetro é usado com Conteúdo em que o conteúdo do arquivo é passado como uma matriz de bytes.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

String

Você pode canalizar uma cadeia de caracteres que contém o caminho do arquivo para Set-AuthenticodeSignature.

Saídas

Signature

Observações

Esse cmdlet só está disponível nas plataformas Windows.