Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
DESCRIPCIÓN BREVE
Explica cómo firmar scripts para que cumplan las directivas de ejecución de PowerShell.
DESCRIPCIÓN LARGA
La directiva de ejecución restringida no permite que se ejecute ningún script. Las directivas de ejecución AllSigned y RemoteSigned impiden que PowerShell ejecute scripts que no tengan una firma digital.
En este tema se explica cómo ejecutar scripts seleccionados que no están firmados, incluso cuando la directiva de ejecución es RemoteSigned, y cómo firmar scripts para su propio uso.
Para obtener más información sobre las directivas de ejecución de PowerShell, consulte about_Execution_Policies.
PARA PERMITIR QUE SE EJECUTEN SCRIPTS FIRMADOS
Al iniciar PowerShell en un equipo por primera vez, es probable que la directiva de ejecución restringida (la predeterminada) esté en vigor.
La política restringida no permite que se ejecute ningún script.
Para buscar la directiva de ejecución efectiva en tu ordenador, escriba:
Get-ExecutionPolicy
Para ejecutar scripts sin firmar que escriba en el equipo local y scripts firmados de otros usuarios, inicie PowerShell con la opción Ejecutar como administrador y, a continuación, use el siguiente comando para cambiar la directiva de ejecución en el equipo a RemoteSigned:
Set-ExecutionPolicy RemoteSigned
Para obtener más información, consulte el tema de ayuda del cmdlet Set-ExecutionPolicy.
EJECUCIÓN DE SCRIPTS SIN FIRMAR (DIRECTIVA DE EJECUCIÓN REMOTESIGNED)
Si la directiva de ejecución de PowerShell es RemoteSigned, Windows PowerShell no ejecutará scripts sin firmar que se descarguen de Internet, incluidos los scripts sin firmar que reciba a través de programas de correo electrónico y mensajería instantánea.
Si intenta ejecutar un script descargado, PowerShell muestra el siguiente mensaje de error:
The file <file-name> cannot be loaded. The file <file-name> is not digitally
signed. The script will not execute on the system. Please see "Get-Help
about_Signing" for more details.
Antes de ejecutar el script, revise el código para asegurarse de que confía en él. Los scripts tienen el mismo efecto que cualquier programa ejecutable.
Para ejecutar un script sin firmar, use el cmdlet Unblock-File o use el siguiente procedimiento.
- Guarde el archivo de script en el equipo.
- Haga clic en Inicio, haga clic en Mi PC y localice el archivo de script guardado.
- Haga clic con el botón secundario en el archivo de script y, a continuación, haga clic en Propiedades.
- Haga clic en Desbloquear.
Si un script que se descargó de Internet está firmado digitalmente, pero aún no ha elegido confiar en su editor, PowerShell muestra el siguiente mensaje:
Do you want to run software from this untrusted publisher?
The file <file-name> is published by CN=<publisher-name>. This
publisher is not trusted on your system. Only run scripts
from trusted publishers.
[V] Never run [D] Do not run [R] Run once [A] Always run
[?] Help (default is "D"):
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", PowerShell no le volverá a preguntar por este editor.
MÉTODOS DE FIRMA DE SCRIPTS
Puede firmar los scripts que escriba y los scripts que obtenga de otros orígenes. Antes de firmar cualquier script, examine cada comando para comprobar que es seguro ejecutarlo.
Para conocer las prácticas recomendadas sobre la firma de código, consulte Code-Signing Prácticas recomendadas.
Para obtener más información sobre cómo firmar un archivo de script, vea Set-AuthenticodeSignature.
El New-SelfSignedCertificate cmdlet, introducido en el módulo PKI de PowerShell 3.0, crea un certificado autofirmado que es adecuado para las pruebas. Para obtener más información, consulte el tema de ayuda del cmdlet New-SelfSignedCertificate.
Para agregar una firma digital a un script, debe firmarla con un certificado de firma de código. Dos tipos de certificados son adecuados para firmar un archivo de script:
Certificados creados por una entidad de certificación: por una cuota, una entidad de certificación pública comprueba su identidad y le proporciona un certificado de firma de código. Al comprar el certificado de una entidad de certificación de reputación, puede compartir el script con los usuarios de otros equipos que ejecutan Windows porque esos otros equipos confían en la entidad de certificación.
Certificados que usted crea: puede crear un certificado autofirmado para el cual su equipo es la autoridad que lo genera. Este certificado es gratuito y le permite escribir, firmar y ejecutar scripts en el equipo. Sin embargo, un script firmado por un certificado autofirmado no se ejecutará en otros equipos.
Normalmente, usaría un certificado autofirmado solo para firmar los scripts que escriba para su propio uso y para firmar los scripts que obtenga de otros orígenes que haya comprobado que son seguros. No es adecuado para scripts que se compartirán, 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 impide que los programas malintencionados firman scripts en su nombre. Las instrucciones se incluyen al final de este tema.
CREAR UN CERTIFICADO SELF-SIGNED
Para crear un certificado autofirmado en uso el cmdlet New-SelfSignedCertificate en el módulo PKI. Este módulo se introduce en PowerShell 3.0 y se incluye en Windows 8 y Windows Server 2012. Para obtener más información, consulte el tema de ayuda del cmdlet New-SelfSignedCertificate.
Para crear un certificado autofirmado en versiones anteriores de Windows, utilice la herramienta Creación de certificados (MakeCert.exe). Esta herramienta se incluye en el SDK de Microsoft .NET Framework (versiones 1.1 y posteriores) y en el SDK de Microsoft Windows.
Para obtener más información sobre la sintaxis y las descripciones de los parámetros de la herramienta MakeCert.exe, consulte Herramienta de creación de certificados (MakeCert.exe).
Para usar la herramienta MakeCert.exe para crear un certificado, ejecute los siguientes comandos en una ventana del símbolo del sistema del SDK.
Nota: El primer comando crea una autoridad de certificación local para su computadora. El segundo comando genera un certificado personal de la entidad de certificación.
Nota: Puede copiar o escribir los comandos exactamente como aparecen. No es necesario realizar sustituciones, aunque puede cambiar el nombre del certificado.
makecert -n "CN=PowerShell Local Certificate Root" -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=PowerShell User" -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 solicitará una contraseña de clave privada. La contraseña garantiza que nadie pueda usar ni acceder 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 el certificado se generó correctamente, use el siguiente comando 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 PowerShell, escriba:
Get-ChildItem cert:\CurrentUser\my -codesigning
Este comando usa el proveedor de certificados de PowerShell para ver información sobre el certificado.
Si se creó el certificado, el resultado muestra la huella digital que identifica el certificado en una pantalla similar a la siguiente:
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]
FIRMAR UN GUIÓN
Después de crear un certificado autofirmado, puede firmar scripts. Si usa la directiva de ejecución AllSigned, la firma de un script le permite ejecutar el script en el equipo.
El siguiente script de ejemplo, Add-Signature.ps1, firma un script. Sin embargo, si usa la directiva de ejecución AllSigned, debe firmar el script Add-Signature.ps1 antes de ejecutarlo.
Para utilizar este script, copie el siguiente texto en un archivo de texto y asígnele el nombre Add-Signature.ps1.
## Signs a file
param([string] $file=$(throw "Please specify a filename."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert
Para firmar el archivo de script Add-Signature.ps1, escriba los siguientes comandos en el símbolo del sistema de PowerShell:
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.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 PowerShell requiera una firma digital de una autoridad de confianza. Si intenta, PowerShell muestra el siguiente mensaje de error:
The file C:\remote_file.ps1 cannot be loaded. The signature of the
certificate cannot be verified.
At line:1 char:15
+ .\ remote_file.ps1 <<<<
Si PowerShell muestra este mensaje al ejecutar un script que no escribió, trate el archivo como trataría cualquier script sin firmar. Revise el código para determinar si puede confiar en el script.
HABILITE LA PROTECCIÓN SEGURA DE CLAVE PRIVADA PARA SU CERTIFICADO
Si tiene un certificado privado en su equipo, es posible que los programas malintencionados puedan firmar scripts en su nombre, lo que autoriza a PowerShell a ejecutarlos.
Para evitar la firma automatizada en su nombre, utilice el Administrador de certificados (Certmgr.exe) para exportar el certificado de firma a un archivo .pfx. El Administrador de certificados se incluye en el SDK de Microsoft .NET Framework, el SDK de Microsoft Windows y en Internet Explorer 5.0 y versiones posteriores.
Para exportar el certificado:
- Inicie el Administrador de certificados.
- Seleccione el certificado emitido por el origen de certificados locales de PowerShell.
- Haga clic en Exportar para iniciar el Asistente para exportación de certificados.
- Seleccione "Sí, exportar la clave privada" y, a continuación, haga clic en Siguiente.
- Selecciona "Habilitar protección fuerte".
- Escriba una contraseña y vuelva a escribirla para confirmarla.
- Escriba un nombre de archivo que tenga la extensión de nombre de archivo .pfx.
- Haga clic en Finalizar
Para volver a importar el certificado:
- Inicie el Administrador de certificados.
- Haga clic en Importar para iniciar el Asistente para importación de certificados.
- Ábralo en la ubicación del archivo .pfx que creó durante el proceso de exportación.
- En la página Contraseña, seleccione "Habilitar la protección de clave privada segura" y, a continuación, escriba la contraseña que asignó durante el proceso de exportación.
- Seleccione el almacén de certificados personales.
- Haga clic en Finalizar
EVITAR QUE LA FIRMA CADUQUE
La firma digital de un script es válida hasta que caduque el certificado de firma o siempre que un servidor de marca de tiempo pueda verificar que el script se firmó mientras el certificado de firma era válido.
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 los usuarios puedan usar el script durante muchos años.