about_Signing

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)