TEMA
about_signing
DESCRIPCIÓN BREVE
Explica cómo firmar los scripts de modo que cumplan las directivas de
ejecución de Windows PowerShell.
DESCRIPCIÓN DETALLADA
La directiva de ejecución Restricted no permite la ejecución de ningún script.
Las directivas de ejecución AllSigned y RemoteSigned evitan que
Windows PowerShell ejecute los scripts sin firma digital.
En este tema se explica cómo ejecutar los scripts no firmados,
incluso si la directiva de ejecución es RemoteSigned, y cómo
firmar los scripts para uso propio.
Para obtener más información sobre las directivas de ejecución de
Windows PowerShell, vea about_Execution_Policy.
PERMITIR LA EJECUCIÓN DE SCRIPTS FIRMADOS
-------------------------------
Cuando se inicia por primera vez Windows PowerShell en un equipo,
es probable que esté vigente la directiva de ejecución
(predeterminada) Restricted.
La directiva Restricted no permite la ejecución de ningún script.
Para obtener la directiva de ejecución vigente en el equipo, escriba:
get-executionpolicy
Para poder ejecutar los scripts no firmados que escriba en el
equipo local y los scripts firmados de otros usuarios, use el comando
siguiente para cambiar la directiva de ejecución en el equipo a
RemoteSigned:
set-executionpolicy remotesigned
Para obtener más información, vea Set-ExecutionPolicy.
EJECUTAR SCRIPTS NO FIRMADOS (DIRECTIVA DE EJECUCIÓN REMOTESIGNED)
--------------------------------------------------------
Si la directiva de ejecución de Windows PowerShell es RemoteSigned,
Windows PowerShell no ejecutará los scripts no firmados que se descarguen
desde Internet ni tampoco los scripts no firmados que se reciban a través
de programas de correo electrónico y mensajería instantánea.
Si intenta ejecutar un script descargado, Windows PowerShell
mostrará el siguiente mensaje de error:
No se puede cargar el archivo <nombre del archivo>. El archivo
<nombre del archivo> no está firmado digitalmente. El script
no se ejecutará en el sistema. Vea "Get-Help about_signing"
para obtener más información.
Antes de ejecutar el script, revise el código para asegurarse de
que es de confianza.
Los scripts tienen el mismo efecto que cualquier programa ejecutable.
Para ejecutar un script sin firma.
1. Guarde el archivo de script en el equipo.
2. Haga clic en Inicio, haga clic en Mi PC y, a continuación,
busque el archivo de script guardado.
3. Haga clic con el botón secundario del mouse en el archivo
de script y, a continuación, haga clic en Propiedades.
4. Haga clic en Desbloquear.
Si un script descargado desde Internet está firmado digitalmente
pero su editor aún no está establecido como editor de confianza
en el sistema, Windows PowerShell mostrará el siguiente mensaje:
¿Desea ejecutar el software de este editor que no es de
confianza? El archivo <nombre del archivo> está publicado por
CN=<nombre del editor>. Este editor no es de confianza en el
sistema. Ejecute únicamente los scripts de los editores de confianza.
[O] No ejecutar nunca [N] No ejecutar [U] Ejecutar una vez
[E] Ejecutar siempre [?] Ayuda (la opción predeterminada es "N"):
Si confía en el editor, seleccione "Ejecutar una vez" o "Ejecutar
siempre". Si no confía en el editor, seleccione "No ejecutar nunca" o "No
ejecutar". Si selecciona "No ejecutar nunca" o "Ejecutar siempre",
Windows PowerShell no se lo volverá a preguntar para este editor.
MÉTODOS PARA FIRMAR SCRIPTS
--------------------------
Puede firmar los scripts que escriba así como los que obtenga de otros
orígenes. Antes de firmar un script, examine cada comando para
comprobar si su ejecución es segura.
Para obtener los procedimientos recomendados referentes a la
firma de código, vea el correspondiente tema en
https://go.microsoft.com/fwlink/?LinkId=119096 (puede estar en inglés).
Para obtener más información sobre cómo firmar un archivo de
script, vea Set-AuthenticodeSignature.
Para agregar una firma digital a un script, debe firmarlo con un
certificado de firma de código. Hay dos tipos de certificados que
se pueden usar para firmar un script:
-- Certificados creados por una entidad de certificación:
Previo pago de una cuota, una entidad de certificación pública
comprueba su identidad y le otorga un certificado de firma de código.
Si adquiere el certificado de una entidad de certificación acreditada,
podrá compartir el script con los usuarios de otros equipos en los que
se ejecute Windows, ya que dichos equipos confían en la entidad de
certificación.
-- Certificados creados por el usuario:
Puede crear un certificado autofirmado para el que su
equipo es la autoridad que crea el certificado.
Este certificado es gratuito y le permite escribir, firmar
y ejecutar scripts en su equipo. Sin embargo, un script
firmado por un certificado autofirmado no se ejecutará en otros
equipos.
Normalmente, un certificado autofirmado se usa únicamente para
firmar los scripts que se escriben para uso propio y los scripts
que se obtienen de otros orígenes tras comprobar que son seguros.
No se presta para los scripts que se van a compartir, incluso
dentro de una empresa.
Si crea un certificado autofirmado, asegúrese de habilitar la
protección de clave privada segura en el certificado. Esto evita que
programas malintencionados le suplanten para firmar scripts. Las
instrucciones se incluyen al final de este tema.
CREAR UN CERTIFICADO AUTOFIRMADO
--------------------------------
Para crear un certificado autofirmado, use la herramienta Creación de
certificados (MakeCert.exe). Esta herramienta va incluida en
Microsoft .NET Framework SDK (versiones 1.1 y posteriores) y en
Microsoft Windows SDK.
Para obtener más información sobre la sintaxis y la descripción de los
parámetros de la herramienta MakeCert.exe, vea "Herramienta Creación de
certificados (MakeCert.exe)" en MSDN (Microsoft Developer Network)
Library, en https://go.microsoft.com/fwlink/? LinkId=119097.
Para usar la herramienta MakeCert.exe a fin de crear un
certificado, ejecute los comandos siguientes en una ventana del
símbolo del sistema del SDK.
Nota: el primer comando crea una entidad de certificación local
para el equipo. El segundo comando genera un certificado personal
de la entidad de certificación.
Nota: puede copiar o escribir los comandos tal y como aparecen.
No es necesario realizar ninguna sustitución, aunque puede
cambiar el nombre del certificado.
makecert -n "CN=Entidad de certificación raíz local de PowerShell" -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
-ss Root -sr localMachine
makecert -pe -n "CN=Usuario de PowerShell" -ss MY -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer
La herramienta MakeCert.exe le pedirá una contraseña de clave
privada. La contraseña garantiza que nadie puede utilizar ni
obtener acceso al certificado sin su consentimiento. Cree y
escriba una contraseña que pueda recordar. Utilizará esta
contraseña más adelante para recuperar el certificado.
Para comprobar que se generó correctamente el certificado, use el
comando siguiente para obtener el certificado en el almacén de
certificados del equipo. (No encontrará un archivo de certificado
en el directorio del sistema de archivos.)
En el símbolo del sistema de Windows PowerShell, escriba:
get-childitem cert:\CurrentUser\my -codesigning
Este comando usa el proveedor de certificados de Windows
PowerShell para mostrar información sobre el certificado.
Si se creó el certificado, el resultado mostrará la huella digital que
identifica el certificado de manera similar a lo que figura a continuación:
Directorio: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Huella digital Asunto
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=Usuario de PowerShell ]
FIRMAR UN SCRIPT
-------------
Después de crear un certificado autofirmado, podrá firmar
scripts. Si usa la directiva de ejecución AllSigned, al firmar un
script podrá ejecutarlo en el equipo.
El siguiente script de ejemplo, Agregar-Firma.ps1, firma un script. No
obstante, si usa la directiva de ejecución AllSigned, deberá firmar
el script Agregar-Firma.ps1 antes de ejecutarlo.
Para usar este script, copie el siguiente texto en un archivo de
texto y asígnele el nombre Agregar-Firma.ps1.
Nota: asegúrese de que el nombre del archivo de script no tenga la
extensión .txt. Si el editor de texto anexa ".txt", escriba
el nombre de archivo entre comillas: "agregar-firma.ps1".
## agregar-firma.ps1
## Firma un archivo
param([string] $file=$(throw "Especifique un nombre de archivo."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert
Para firmar el archivo de script Agregar-Firma.ps1, escriba los
siguientes comandos en el símbolo del sistema de Windows PowerShell:
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature agregar-firma.ps1 $cert
Una vez firmado el script, puede ejecutarlo en el equipo local.
Sin embargo, el script no se ejecutará en equipos en los que la
directiva de ejecución de Windows PowerShell requiera una firma
digital de una entidad de confianza. Si intenta ejecutarlo, Windows
PowerShell mostrará el siguiente mensaje de error:
No se puede cargar el archivo C:\remote_file.ps1. No se puede
comprobar la firma del certificado.
En línea:1 carácter:15
+ .\ remote_file.ps1 <<<<
Si Windows PowerShell muestra este mensaje al ejecutar un script
de otro autor, trate el archivo como cualquier otro script no
firmado. Revise el código para determinar si puede confiar en el
script.
HABILITAR LA PROTECCIÓN DE CLAVE PRIVADA SEGURA PARA UN CERTIFICADO
---------------------------------------------------------
Si tiene un certificado privado en el equipo, programas
malintencionados podrían suplantarle para firmar scripts, lo que
autorizaría a Windows PowerShell a ejecutar dichos scripts.
Para evitar la firma automatizada en su nombre, use el
Administrador de certificados (Certmgr.exe) para exportar su
certificado de firma a un archivo .pfx. El Administrador de
certificados va incluido en Microsoft .NET Framework SDK,
Microsoft Windows SDK así como en Internet Explorer 5.0 y versiones
posteriores.
Para exportar el certificado:
1. Inicie el Administrador de certificados.
2. Seleccione el certificado emitido por la Entidad de
certificación raíz local de PowerShell.
3. Haga clic en Exportar para iniciar el Asistente para
exportación de certificados.
4. Seleccione "Exportar la clave privada" y, a continuación,
haga clic en Siguiente.
5. Seleccione "Permitir protección segura".
6. Escriba una contraseña y, a continuación, vuelva a
escribirla para confirmarla.
7. Escriba un nombre de archivo con la extensión .pfx.
8. Haga clic en Finalizar.
Para volver a importar el certificado:
1. Inicie el Administrador de certificados.
2. Haga clic en Importar para iniciar el Asistente para
importación de certificados.
3. Vaya a la ubicación del archivo .pfx que creó en el proceso de
exportación.
4. En la página Contraseña, seleccione "Habilitar la protección de
clave privada de alta seguridad" y, a continuación, escriba la
contraseña que asignó en el proceso de exportación.
5. Seleccione el almacén de certificados Personal.
6. Haga clic en Finalizar.
EVITAR LA EXPIRACIÓN DE LA FIRMA
-----------------------------------
La firma digital en un script es válida hasta que expire el
certificado de firma o mientras un servidor de marca de tiempo pueda
comprobar que el script se firmó durante el período de validez del
certificado de firma.
Dado que la mayoría de los certificados de firma son válidos
solo durante un año, el uso de un servidor de marca de tiempo
garantiza que se puede usar el script durante varios años.
VEA TAMBIÉN
about_Execution_Policies
about_Profiles
Get-ExecutionPolicy
Set-ExecutionPolicy
Set-AuthenticodeSignature
"Introducción a la firma de código" (https://go.microsoft.com/fwlink/?LinkId=106296)(puede estar en inglés)