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 ofereça suporte ao SIP (Subject Interface Package).
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 for executado, essa assinatura será removida.
Exemplos
Exemplo 1 - Assinar um script usando um certificado do armazenamento 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 certificado. O parâmetro CodeSigningCert , que é suportado apenas pelo provedor de certificados, limita os certificados recuperados àqueles com autoridade de assinatura de código. O comando armazena $cert
o resultado na 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 é armazenado na $cert
variável e o parâmetro HashAlgorithm para definir o algoritmo de hash como SHA256.
O terceiro comando assina o script splatting os parâmetros definidos em $signingParameters
.
Nota
Usar o parâmetro CodeSigningCert com Get-ChildItem
somente retorna certificados que têm autoridade de assinatura de código e contêm uma chave privada. Se não houver uma 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 é armazenado na $cert
variável e o parâmetro HashAlgorithm para definir o algoritmo de hash como SHA256.
O terceiro comando assina o script splatting 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 na cadeia de confiança e é assinado por um servidor de carimbo de data/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 é 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 evita que o script falhe quando o certificado expirar.
O segundo comando assina o script splatting 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 armazene 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á.
Type: | X509Certificate2 |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Confirm
Solicita a 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
Esse parâmetro aparece na listagem de sintaxe porque é definido na classe Set-AuthenticodeSignature
base da qual é derivada. No entanto, o suporte para este parâmetro não é implementado no Set-AuthenticodeSignature
.
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 que o cmdlet acrescente uma assinatura a um arquivo somente leitura. Mesmo usando o parâmetro Force , o cmdlet não pode substituir 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.
O padrão é SHA1. Os arquivos assinados com um algoritmo de hash diferente podem não ser reconhecidos em outros sistemas. Os algoritmos suportados dependem da versão do sistema operativo.
Para obter uma lista de valores possíveis, consulte HashAlgorithmName Struct.
Type: | String |
Position: | Named |
Default value: | Null |
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 a autoridade raiz.
- Todos: 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 de FilePath, o valor do parâmetro LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. 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
Esse parâmetro aparece na listagem de sintaxe porque é definido na classe Set-AuthenticodeSignature
base da qual é derivada. No entanto, o suporte para este parâmetro não é implementado no Set-AuthenticodeSignature
.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-TimestampServer
Usa o servidor de carimbo de data/hora especificado para adicionar um carimbo de data/hora à assinatura. Digite a URL do servidor de carimbo de data/hora como uma cadeia de caracteres.
O carimbo de data/hora representa a hora exata em que o certificado foi adicionado ao arquivo. Um carimbo de data/hora impede que o script falhe se o certificado expirar, porque os 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
Apresenta o que aconteceria mediante a execução do cmdlet. 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
Você pode canalizar uma cadeia de caracteres que contenha o caminho do arquivo para esse cmdlet.
Saídas
Este cmdlet retorna um objeto Signature que representa o valor que ele definiu.
Ligações Relacionadas
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários