Compartir a través de


Set-AuthenticodeSignature

Agrega una firma Authenticode a un script de PowerShell u otro archivo.

Sintaxis

ByPath (valor predeterminado)

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

El cmdlet Set-AuthenticodeSignature agrega una firma Authenticode a cualquier archivo que admita Subject Interface Package (SIP).

En un archivo de script de PowerShell, la firma adopta la forma de un bloque de texto que indica el final de las instrucciones que se ejecutan en el script. Si hay una firma en el archivo cuando se ejecuta este cmdlet, se quita esa firma.

Ejemplos

Ejemplo 1: Firmar un script mediante un certificado del almacén de certificados local

Estos comandos recuperan un certificado de firma de código del proveedor de certificados de PowerShell y lo usan para firmar un script de PowerShell.

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
$signingParameters = @{
    FilePath      = 'PsTestInternet2.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

El primer comando usa el cmdlet Get-ChildItem y el proveedor de certificados de PowerShell para obtener los certificados en el subdirectorio Cert:\CurrentUser\My del almacén de certificados. La unidad Cert: es la unidad expuesta por el proveedor de certificados. El parámetro CodeSigningCert, que solo es compatible con el proveedor de certificados, limita los certificados recuperados a los que tienen entidad de firma de código. El comando almacena el resultado en la variable $cert.

El segundo comando define la variable $signingParameters como hashTable con los parámetros del cmdlet Set-AuthenticodeSignature para firmar el script de PSTestInternet2.ps1. Usa el parámetro FilePath para especificar el nombre del script, el parámetro Certificate para especificar que el certificado se almacena en la variable $cert y el parámetro HashAlgorithm para establecer el algoritmo hash en SHA256.

El tercer comando firma el script mediante la expansión de los parámetros definidos en $signingParameters.

Nota:

Al usar el parámetro CodeSigningCert con Get-ChildItem, solo se devuelven certificados que tienen capacidad de firma de código y contienen una clave privada. Si no hay ninguna clave privada, los certificados no se pueden usar para firmar.

Ejemplo 2: Firmar un script mediante un certificado de un archivo PFX

Estos comandos usan el cmdlet Get-PfxCertificate para cargar un certificado de firma de código. A continuación, úselo para firmar un script de PowerShell.

$cert = Get-PfxCertificate -FilePath C:\Test\Mysign.pfx
$signingParameters = @{
    FilePath      = 'ServerProps.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
}
Set-AuthenticodeSignature @signingParameters

El primer comando usa el cmdlet Get-PfxCertificate para cargar el certificado C:\Test\MySign.pfx en la variable $cert.

El segundo comando define la variable $signingParameters como hashTable con los parámetros del cmdlet Set-AuthenticodeSignature para firmar el script de ServerProps.ps1. Usa el parámetro FilePath para especificar el nombre del script, el parámetro Certificate para especificar que el certificado se almacena en la variable $cert y el parámetro HashAlgorithm para establecer el algoritmo hash en SHA256.

El tercer comando firma el script mediante la expansión de los parámetros definidos en $signingParameters.

Si el archivo de certificado está protegido con contraseña, PowerShell le pedirá la contraseña.

Ejemplo 3: Agregar una firma que incluya la entidad raíz

Este comando agrega una firma digital que incluye la entidad raíz en la cadena de confianza y está firmada por un servidor de marca de tiempo de terceros.

$signingParameters = @{
    FilePath      = 'C:\scripts\Remodel.ps1'
    Certificate   = $cert
    HashAlgorithm = 'SHA256'
    IncludeChain  = 'All'
    TimestampServer = 'http://timestamp.fabrikam.com/scripts/timstamper.dll'
}
Set-AuthenticodeSignature @signingParameters

El comando usa el parámetro FilePath para especificar el script que se firma y el parámetro Certificate para especificar el certificado que se guarda en la variable $cert. Usa el parámetro IncludeChain para incluir todas las firmas de la cadena de confianza, incluida la entidad raíz. También usa el parámetro TimeStampServer para agregar una marca de tiempo a la firma. Esto impide que se produzca un error en el script cuando expire el certificado.

El segundo comando firma el script mediante la expansión de los parámetros definidos en $signingParameters.

Parámetros

-Certificate

Especifica el certificado que se usará para firmar el script o el archivo. Escriba una variable que almacene un objeto que represente el certificado o una expresión que obtenga el certificado.

Para buscar un certificado, utilice Get-PfxCertificate o el cmdlet Get-ChildItem en la unidad del certificado Cert:. Si el certificado no es válido o no tiene code-signing autoridad, se produce un error en el comando.

Propiedades de parámetro

Tipo:X509Certificate2
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:1
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Confirm

Le pide confirmación antes de ejecutar el cmdlet.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:False
Admite caracteres comodín:False
DontShow:False
Alias:cf

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Content

Este parámetro aparece en la lista de sintaxis porque se define en la clase base de la que se deriva Set-AuthenticodeSignature. Sin embargo, la compatibilidad con este parámetro no se implementa en Set-AuthenticodeSignature.

Propiedades de parámetro

Tipo:

Byte[]

Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

ByContent
Posición:Named
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:True
Valor de los argumentos restantes:False

-FilePath

Especifica la ruta de acceso a un archivo que se está firmando.

Propiedades de parámetro

Tipo:

String[]

Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

ByPath
Posición:1
Obligatorio:True
Valor de la canalización:True
Valor de la canalización por nombre de propiedad:True
Valor de los argumentos restantes:False

-Force

Permite que el cmdlet anexe una firma a un archivo de solo lectura. Incluso con el parámetro Force, el cmdlet no puede invalidar las restricciones de seguridad.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:False
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-HashAlgorithm

Especifica el algoritmo hash que Windows usa para calcular la firma digital del archivo.

El valor predeterminado es SHA1. Es posible que los archivos firmados con un algoritmo hash diferente no se reconozcan en otros sistemas. Los algoritmos que se admiten dependen de la versión del sistema operativo.

Para obtener una lista de los valores posibles, consulte la estructura HashAlgorithmName.

Propiedades de parámetro

Tipo:String
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-IncludeChain

Determina qué certificados de la cadena de confianza de certificados se incluyen en la firma digital. NotRoot es el valor predeterminado.

Los valores válidos son:

  • Signer: incluye solo el certificado del firmante.
  • NotRoot: incluye todos los certificados de la cadena de certificados, excepto para la entidad raíz.
  • All: incluye todos los certificados de la cadena de certificados.

Propiedades de parámetro

Tipo:String
Valor predeterminado:NotRoot
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-LiteralPath

Especifica la ruta de acceso a un archivo que se está firmando. A diferencia de FilePath, el valor del parámetro LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso incluye caracteres de escape, escríbala entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.

Propiedades de parámetro

Tipo:

String[]

Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:PSPath

Conjuntos de parámetros

ByLiteralPath
Posición:Named
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:True
Valor de los argumentos restantes:False

-SourcePathOrExtension

Este parámetro aparece en la lista de sintaxis porque se define en la clase base de la que se deriva Set-AuthenticodeSignature. Sin embargo, la compatibilidad con este parámetro no se implementa en Set-AuthenticodeSignature.

Propiedades de parámetro

Tipo:

String[]

Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

ByContent
Posición:Named
Obligatorio:True
Valor de la canalización:True
Valor de la canalización por nombre de propiedad:True
Valor de los argumentos restantes:False

-TimestampServer

Usa el servidor de marca de tiempo especificado para agregar una marca de tiempo a la firma. Escriba la dirección URL del servidor de marca de tiempo como una cadena. La URL debe empezar por http://.

La marca de tiempo representa la hora exacta en que se agregó el certificado al archivo. Una marca de tiempo impide que se produzca un error en el script si el certificado expira porque los usuarios y programas pueden comprobar que el certificado era válido en el momento de la firma.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-WhatIf

Muestra lo que sucedería si el cmdlet se ejecuta. El cmdlet no se ejecuta.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:False
Admite caracteres comodín:False
DontShow:False
Alias:Wi

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

CommonParameters

Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.

Entradas

String

Puede canalizar una cadena que contenga la ruta de acceso del archivo a este cmdlet.

Salidas

Signature

Este cmdlet devuelve un objeto Signature que representa el valor que ha establecido.