PowerShell
Firma de Scripts
Buscar..
Observaciones
Firmar un script hará que sus scripts cumplan con todas las políticas de ejecución en PowerShell y garantizará la integridad de un script. Los scripts firmados no se ejecutarán si se han modificado después de firmarlos.
La firma de scripts requiere un certificado de firma de código. Recomendaciones:
- Pruebas / scripts personales (no compartidos): certificado de una autoridad certificada de confianza (interna o de terceros) O un certificado autofirmado.
- Organización interna compartida: Certificado de la autoridad certificada de confianza (interna o de terceros)
- Organización externa compartida: Certificado de la autoridad certificadora de terceros de confianza
Lea más en about_Signing @ TechNet
Políticas de ejecución
PowerShell tiene políticas de ejecución configurables que controlan qué condiciones se requieren para que se ejecute un script o una configuración. Se puede establecer una política de ejecución para múltiples ámbitos; Computadora, usuario actual y proceso actual. Las políticas de ejecución se pueden omitir fácilmente y no están diseñadas para restringir a los usuarios, sino protegerlos de violar las políticas de firma involuntariamente.
Las políticas disponibles son:
Ajuste | Descripción |
---|---|
Restringido | No se permiten scripts |
AllSigned | Todos los scripts necesitan ser firmados |
RemoteSigned | Todos los scripts locales permitidos; solo scripts remotos firmados |
Irrestricto | No hay requisitos. Todos los scripts están permitidos, pero avisarán antes de ejecutar los scripts descargados de Internet. |
Derivación | Se permiten todos los scripts y no se muestran advertencias |
Indefinido | Eliminar la política de ejecución actual para el ámbito actual. Utiliza la política de los padres. Si todas las políticas no están definidas, se utilizará la restricción. |
Puede modificar las políticas de ejecución actuales utilizando Set-ExecutionPolicy
-cmdlet, Group Policy o el parámetro -ExecutionPolicy
cuando -ExecutionPolicy
un proceso powershell.exe
.
Lea más en about_Execution_Policies @ TechNet
Firmando un guion
La firma de un script se realiza mediante el uso del Set-AuthenticodeSignature
-cmdlet y un certificado de firma de código.
#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1
También puede leer un certificado de un archivo .pfx
usando:
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
El guión será válido hasta que caduque el certificado. Si utiliza un servidor de marca de tiempo durante la firma, la secuencia de comandos seguirá siendo válida después de que caduque el certificado. También es útil agregar la cadena de confianza para el certificado (incluida la autoridad raíz) para ayudar a la mayoría de las computadoras a confiar en el certificado utilizado para firmar el script.
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Se recomienda utilizar un servidor de marca de tiempo de un proveedor de certificados de confianza como Verisign, Comodo, Thawte, etc.
Cambiando la política de ejecución usando Set-ExecutionPolicy
Para cambiar la política de ejecución para el ámbito predeterminado (LocalMachine), use:
Set-ExecutionPolicy AllSigned
Para cambiar la política para un alcance específico, use:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
Puede suprimir las indicaciones agregando el interruptor -Force
.
Omitir la política de ejecución para un solo script
A menudo es posible que necesite ejecutar un script sin firmar que no cumpla con la política de ejecución actual. Una forma fácil de hacer esto es omitir la política de ejecución para ese proceso único. Ejemplo:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
O puedes usar la taquigrafía:
powershell -ep Bypass C:\MyUnsignedScript.ps1
Otras políticas de ejecución:
Política | Descripción |
---|---|
AllSigned | Solo se pueden ejecutar scripts firmados por un editor de confianza. |
Bypass | Sin restricciones; Se pueden ejecutar todos los scripts de Windows PowerShell. |
Default | Normalmente RemoteSigned , pero se controla a través de ActiveDirectory |
RemoteSigned | Los scripts descargados deben estar firmados por un editor de confianza antes de que puedan ejecutarse. |
Restricted | No se pueden ejecutar scripts. Windows PowerShell solo se puede utilizar en modo interactivo. |
Undefined | N / A |
Unrestricted * | Similar a la bypass |
Unrestricted*
Advertencia: si ejecuta una secuencia de comandos sin firmar que se descargó de Internet, se le solicitará permiso antes de que se ejecute.
Más información disponible aquí .
Obtener la política de ejecución actual.
Obtención de la política de ejecución efectiva para la sesión actual:
PS> Get-ExecutionPolicy
RemoteSigned
Listar todas las políticas de ejecución efectivas para la sesión actual:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Listar la política de ejecución para un alcance específico, ej. proceso:
PS> Get-ExecutionPolicy -Scope Process
Undefined
Obteniendo la firma de un script firmado
Obtenga información sobre la firma Authenticode de un script firmado utilizando el Get-AuthenticodeSignature
-cmdlet:
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
Creación de un certificado de firma de código autofirmado para pruebas
Al firmar scripts personales o al probar la firma de código, puede ser útil crear un certificado de firma de código autofirmado.
A partir de PowerShell 5.0, puede generar un certificado de firma de código autofirmado mediante el certificado de New-SelfSignedCertificate
Self:
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
En versiones anteriores, puede crear un certificado autofirmado utilizando la herramienta makecert.exe
que se encuentra en .NET Framework SDK y Windows SDK.
Solo las computadoras que tengan instalado el certificado confiarán en un certificado autofirmado. Para los scripts que se compartirán, se recomienda un certificado de una autoridad de certificados de confianza (interna o de terceros de confianza).