Firmar secuencias de comandos
Una autoridad de confianza de la consola debe firmar la secuencia de comandos para que se importe o la ejecute Security Controls. Todas las secuencias de comandos proporcionadas en Security Controls las firma Ivanti. Durante la instalación de Security Controls, el certificado de Ivanti se agrega al almacén de certificados de confianza del equipo de la consola.
Debe firmar las secuencias que cree antes de importarlas a Security Controls. Para hacerlo, necesita un certificado de firma. Ese certificado debe emitirlo una autoridad de la lista de confianza de las consolas que vayan a ejecutar la secuencia de comandos que cree.
Esta sección describirá un modo de crear un certificado de firma y lo agrega a los certificados de confianza de la consola.
Crear un Certificado raíz capaz de emitir un certificado de firma de código
Este paso requiere el uso de Windows 10 o de Windows Server 2016 o posterior.
Para crear un nuevo certificado raíz capaz de emitir un certificado de firma de código, utilice el comando siguiente.
PS C:\> $signerRoot = New-SelfSignedCertificate -Subject "CN=PowerShell Local Certificate Root2" -HashAlgorithm Sha256 -CertStoreLocation Cert:\LocalMachine\My -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyUsageProperty None -KeyUsage None
Creación de un Certificado de firma
Este paso requiere el uso de Windows 10 o de Windows Server 2016 o posterior.
El paso siguiente es crear un certificado de firma que emite el certificado de raíz. Para hacerlo, introduzca el siguiente aviso de comando:
PS C:\> $powershellSignerSigner = New-SelfSignedCertificate -Subject "CN=PowerShell User" -HashAlgorithm Sha256 -CertStoreLocation Cert:\LocalMachine\My -Signer $signerRoot -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") -KeyUsageProperty None -KeyUsage None
Verificación del certificado de firma
Puede verificar el certificado desde PorweShell con la introducción del comando siguiente:
Get-ChildItem cert:\LocalMachine\My -codesigning | Where-Object {$_.Subject -match "CN=PowerShell User"}
Si se encuentra el certificado, mostrará la huella y el sujeto del certificado, como esto:
Mueva el certificado de firma al almacén de certificados raíz de confianza
Debe mover el certificado de firma de "Mi" almacén de certificados al almacén de certificados "Raíz". Esto se acumula en la cadena de confianza del almacén raíz.
PS C:\> Move-Item -Path "Cert:\LocalMachine\My\$($signerRoot.Thumbprint)" -Destination Cert:\LocalMachine\Root
Firmar una secuencia de comandos
Esta sección describirá cómo firmar un archivo de secuencias de comandos de un aviso de PowerShell o de un ISE de PowerShell.
Desde el aviso del comando de PowerShell, cambie al directorio que contiene el archivo de la secuencia de comandos. En este ejemplo, se denomina test-script.ps1. A continuación, introduzca los dos comandos siguientes:
El primer comando se debe introducir en una única línea. El usuario de CN=PowerShell debe coincidir con el nombre que especificó cuando creó el certificado de firma.
$cert = @(Get-ChildItem cert:\LocalMachine\My -codesigning | Where-Object {$_.Subject -match "CN=PowerShell User"})[0]
Set-AuthenticodeSignature .\test-script.ps1 $cert
El primer comando localizará el certificado en el almacén de certificados. El segundo comando firma la secuencia usando ese certificado.
Firmar la secuencia de comandos agregará al final un bloque similar a este:
# SIG # Iniciar bloqueo de firma
# MIIEMwYJKoZIhvcNAQcCoIIEJDCCBCACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4QyppfQY+5HviH7wuIBvvmRf
……
# SIG # Terminar bloqueo de firma
Si realiza algún cambio a la secuencia, deberá volver a diseñarla.
Firmar una secuencia de comandos con un archivo PFX
Si desea firmar secuencias de comandos con el mismo certificado de firma en varios equipos sin instalar el certificado de firma en cada equipo, puede usar un archivo PFX (Intercambio de información personal).
Para crear un archivo PFX:
- Ejecutar CertMgr.exe.
- En la pestaña Personal, seleccione el certificado de firma.
- Haga clic en Exportar.
- En la primera pantalla del asistente de exportación, haga clic en Siguiente.
- Seleccione la opción Intercambio de información personal.
Si hay una opción Habilitar protección fuerte, selecciónela. - Introduzca una contraseña cuando se indique.
Esto será necesario cuando utilice este archivo pfx para firmar secuencias de comandos. - Cuando se indique, escriba un nombre para el archivo pfx.
Para firmar una secuencia de comandos con el archivo PFX, introduzca los comandos siguientes en PowerShell:
$cert = Get-PfxCertificate mycert.pfx
Set-AuthenticodeSignature .\test-script.ps1 $cert
Cuando se indique, proporcione la contraseña que creó en el paso 6.