Set AuthenticodeSignature - PowerShell


Overview

The Set-AuthenticodeSignature command adds or updates the Authenticode digital signature to a specified file. This helps ensure the file’s integrity and authenticity, providing greater confidence to end-users and preventing unauthorized alterations.

Syntax

Set-AuthenticodeSignature -FilePath <string> [[-Certificate <string>] [-PrivateKey <Object>] [-TimestampServer <string>] [-HashAlgorithm <string>] [-DigestAlgorithm <string>] [-Format <string>] [-Silent] [-Force] [-Verbose]]

Options/Flags

  • -Certificate: Specifies the certificate used for signing. Default: The first certificate in the local computer certificate store that matches the subject name of the file.
  • -PrivateKey: Specifies the private key associated with the certificate.
  • -TimestampServer: Sets the timestamp server to use. Default: http://timestamp.digicert.com
  • -HashAlgorithm: Sets the hash algorithm to use for signing. Default: sha256
  • -DigestAlgorithm: Sets the digest algorithm to use for signing. Default: sha256
  • -Format: Sets the format for the signature. Default: PKCS7
  • -Silent: Suppresses console output.
  • -Force: Overwrites an existing signature without prompting.
  • -Verbose: Provides detailed progress information.

Examples

Example 1: Simple Signature

This command adds a simple Authenticode signature to the file MyFile.exe:

Set-AuthenticodeSignature -FilePath "MyFile.exe"

Example 2: Custom Certificate and Timestamp Server

This command signs the file Installer.msi using a custom certificate and timestamp server:

Set-AuthenticodeSignature -FilePath "Installer.msi" -Certificate "MyCert.pfx" -PrivateKey "MyKey.pvk" -TimestampServer "http://mytimestampserver.com"

Example 3: Advanced Options

This command signs the file Setup.exe using a specific hash and digest algorithm, in Enhanced format, and suppresses console output:

Set-AuthenticodeSignature -FilePath "Setup.exe" -HashAlgorithm "sha512" -DigestAlgorithm "sha384" -Format "Enhanced" -Silent

Common Issues

  • Couldn’t find an appropriate certificate: Ensure the certificate specified is valid and installed in the local computer certificate store.
  • Certificate doesn’t match the file’s subject: The certificate must be issued for the subject name of the file being signed.
  • Invalid timestamp response: Verify the timestamp server is reachable and accessible.

Integration

Set-AuthenticodeSignature can be combined with other commands for advanced tasks:

  • Use Get-AuthenticodeSignature to retrieve the existing signature information.
  • Pass the signed file to Invoke-WebRequest to verify the signature online.
  • Use New-SelfSignedCertificate to create a self-signed certificate for signing.