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)