Set-AuthenticodeSignature
Agrega una firma Authenticode a un script de PowerShell u otro archivo.
Sintaxis
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
El Set-AuthenticodeSignature
cmdlet 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 Get-ChildItem
cmdlet y el proveedor de certificados de PowerShell para obtener los certificados en el Cert:\CurrentUser\My
subdirectorio del almacén de certificados. La Cert:
unidad 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 $cert
variable .
El segundo comando define la $signingParameters
variable como hashTable con los parámetros del Set-AuthenticodeSignature
cmdlet para firmar el PSTestInternet2.ps1
script. Usa el parámetro FilePath para especificar el nombre del script, el parámetro Certificate para especificar que el certificado se almacena en la $cert
variable 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:
El uso del parámetro CodeSigningCert con Get-ChildItem
solo devuelve certificados que tienen entidad 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 Get-PfxCertificate
cmdlet 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 Get-PfxCertificate
cmdlet para cargar el certificado C:\Test\MySign.pfx en la $cert
variable.
El segundo comando define la $signingParameters
variable como hashTable con los parámetros del Set-AuthenticodeSignature
cmdlet para firmar el ServerProps.ps1
script. Usa el parámetro FilePath para especificar el nombre del script, el parámetro Certificate para especificar que el certificado se almacena en la $cert
variable 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 de certificación raíz en la cadena de confianza y está firmado 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 primer comando define la $signingParameters
variable como hashTable con los parámetros del Set-AuthenticodeSignature
cmdlet para firmar el script. Usa el parámetro FilePath para especificar la ruta de acceso al script, el parámetro Certificate para especificar que el certificado se almacena en la $cert
variable y el parámetro HashAlgorithm para establecer el algoritmo hash en SHA256. 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 evita que el script genere un error cuando el certificado expira.
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 al certificado o una expresión que obtenga el certificado.
Para buscar un certificado, use Get-PfxCertificate
o use el Get-ChildItem
cmdlet en la unidad de certificado Cert:
. Si el certificado no es válido o no tiene code-signing
autoridad, se produce un error en el comando.
Tipo: | X509Certificate2 |
Posición: | 1 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Confirm
Le solicita su confirmación antes de ejecutar el cmdlet.
Tipo: | SwitchParameter |
Alias: | cf |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Content
Este parámetro aparece en la lista de sintaxis porque se define en la clase base de la que Set-AuthenticodeSignature
se deriva. Sin embargo, la compatibilidad con este parámetro no se implementa en Set-AuthenticodeSignature
.
Tipo: | Byte[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-FilePath
Especifica la ruta de acceso a un archivo que se está firmando.
Tipo: | String[] |
Posición: | 1 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | 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.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-HashAlgorithm
Especifica el algoritmo hash que usa Windows para calcular la firma digital del archivo.
El valor predeterminado es SHA1. Puede que los archivos firmados con otro algoritmo hash 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, vea HashAlgorithmName Struct.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | Null |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-IncludeChain
Determina qué certificados de la cadena de certificados de confianza se incluyen en la firma digital. NotRoot es el valor predeterminado.
Los valores válidos son:
- Firmante: 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.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | NotRoot |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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 contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.
Tipo: | String[] |
Alias: | PSPath |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-SourcePathOrExtension
Este parámetro aparece en la lista de sintaxis porque se define en la clase base de la que Set-AuthenticodeSignature
se deriva. Sin embargo, la compatibilidad con este parámetro no se implementa en Set-AuthenticodeSignature
.
Tipo: | String[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-TimestampServer
Usa el servidor de marca de tiempo especificado para agregar una marca de tiempo a la firma. Escriba la URL del servidor de marca de tiempo como una cadena.
La marca de tiempo representa la hora exacta a la que se agregó el certificado al archivo. Una marca de tiempo evita que el script genere un error si el certificado expira porque los usuarios y programas pueden comprobar que el certificado era válido en el momento de la firma.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-WhatIf
Muestra lo que sucedería si se ejecutara el cmdlet. El cmdlet no se ejecuta.
Tipo: | SwitchParameter |
Alias: | wi |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
Puede canalizar una cadena que contenga la ruta de acceso del archivo a este cmdlet.
Salidas
Este cmdlet devuelve un objeto Signature que representa el valor establecido.