Set-AuthenticodeSignature
Adiciona uma assinatura Authenticode a um script do PowerShell ou outro arquivo.
Sintaxe
ByPath (Predefinição)
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
[-FilePath] <String[]>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ByLiteralPath
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
-LiteralPath <String[]>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
ByContent
Set-AuthenticodeSignature
[-Certificate] <X509Certificate2>
-SourcePathOrExtension <String[]>
-Content <Byte[]>
[-IncludeChain <String>]
[-TimestampServer <String>]
[-HashAlgorithm <String>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Este cmdlet só está disponível na plataforma Windows.
O cmdlet Set-AuthenticodeSignature 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 Certificado 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 cmdlet Get-ChildItem e o provedor de Certificados do PowerShell para obter os certificados no subdiretório Cert:\CurrentUser\My do repositório de certificados. A unidade Cert: é a unidade exposta pelo provedor de certificado. O parâmetro CodeSigningCert, que é suportado apenas pelo provedor de certificado, limita os certificados recuperados àqueles com autoridade de assinatura de código. O comando armazena o resultado na variável $cert.
O segundo comando usa o cmdlet Set-AuthenticodeSignature para assinar o script PSTestInternet2.ps1. Ele usa o parâmetro FilePath para especificar o nome do script e o parâmetro Certificate para especificar que o certificado é armazenado na variável $cert.
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 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 cmdlet Get-PfxCertificate 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 cmdlet Get-PfxCertificate para carregar o certificado C:\Test\MySign.pfx na variável $cert.
O segundo comando usa Set-AuthenticodeSignature para assinar o script. O parâmetro FilePath de Set-AuthenticodeSignature especifica o caminho para o arquivo de script que está sendo assinado e o parâmetro Cert passa a variável $cert 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 na cadeia de confiança e é assinada 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 comando usa o parâmetro FilePath para especificar o script que está sendo assinado e o parâmetro Certificate para especificar o certificado salvo na variável $cert. 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 expira.
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 cmdlet Get-ChildItem na unidade Certificate Cert:. Se o certificado não for válido ou não tiver autoridade code-signing, o comando falhará.
Propriedades dos parâmetros
| Tipo: | X509Certificate2 |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | 1 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Confirm
Solicita confirmação antes de executar o cmdlet.
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | False |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
| Aliases: | Cf. |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Content
Esse parâmetro aparece na listagem de sintaxe porque é definido na classe base da qual Set-AuthenticodeSignature é derivado. No entanto, o suporte para esse parâmetro não é implementado no Set-AuthenticodeSignature.
Propriedades dos parâmetros
| Tipo: | Byte[] |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
ByContent
| Position: | Named |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | True |
| Valor dos restantes argumentos: | False |
-FilePath
Especifica o caminho para um arquivo que está sendo assinado.
Propriedades dos parâmetros
| Tipo: | String[] |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
ByPath
| Position: | 1 |
| Obrigatório: | True |
| Valor do pipeline: | True |
| Valor do pipeline por nome de propriedade: | True |
| Valor dos restantes argumentos: | False |
-Force
Permite que o cmdlet acrescente uma assinatura a um arquivo somente leitura. Mesmo usando o parâmetro Force, o cmdlet não consegue ultrapassar restrições de segurança.
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | False |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-HashAlgorithm
Especifica o algoritmo de hash que o Windows usa para calcular a assinatura digital do arquivo.
Para o PowerShell 7.3, o padrão é SHA256, que é o algoritmo de hash padrão do Windows. Para versões anteriores, 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.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | SHA256 |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | 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:
-
Signer: Inclui apenas o certificado do signatário. -
NotRoot: Inclui todos os certificados na cadeia de certificados, exceto a autoridade raiz. -
All: Inclui todos os certificados na cadeia de certificados.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | NotRoot |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-LiteralPath
Especifica o caminho para um arquivo que está sendo assinado. Ao contrário FilePath, o valor do parâmetro LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como carta curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. Aspas simples indicam ao PowerShell para não interpretar quaisquer caracteres como sequências de escape.
Propriedades dos parâmetros
| Tipo: | String[] |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
| Aliases: | PSPath, LP |
Conjuntos de parâmetros
ByLiteralPath
| Position: | Named |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | True |
| Valor dos restantes argumentos: | False |
-SourcePathOrExtension
Esse parâmetro aparece na listagem de sintaxe porque é definido na classe base da qual Set-AuthenticodeSignature é derivado. No entanto, o suporte para esse parâmetro não é implementado no Set-AuthenticodeSignature.
Propriedades dos parâmetros
| Tipo: | String[] |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
ByContent
| Position: | Named |
| Obrigatório: | True |
| Valor do pipeline: | True |
| Valor do pipeline por nome de propriedade: | True |
| Valor dos restantes argumentos: | 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 URL deve começar com http://.
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.
Observação
O PowerShell 7.3 adicionou suporte para URLs https:// com esse parâmetro. No entanto, a API subjacente não suporta HTTPS. Se você usar HTTPS, o comando retornará um erro, mas o arquivo é assinado sem um carimbo de data/hora. Para obter mais informações, consulte Issue #25130.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-WhatIf
Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | False |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
| Aliases: | Wi |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
CommonParameters
Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.
Entradas
String
Você pode canalizar uma cadeia de caracteres que contenha o caminho do arquivo para esse cmdlet.
Saídas
Signature
Este cmdlet retorna um objeto Signature que representa o valor definido.
Notas
Este cmdlet só está disponível em plataformas Windows.