Compartir a través de


Creación de un certificado para la firma de paquetes

En este artículo se explica cómo crear y confiar en un certificado para la firma de paquetes de aplicación mediante herramientas de PowerShell (para herramientas de CMD, consulte aquí). Se recomienda usar Visual Studio para empaquetar aplicaciones para UWP y empaquetar aplicaciones de escritorio, pero todavía puedes empaquetar una aplicación manualmente si no usasTe Visual Studio para desarrollar la aplicación.

Prerrequisitos

  • Una aplicación empaquetada o desempaquetada
    Una aplicación que contiene un archivo AppxManifest.xml. Deberá hacer referencia al archivo de manifiesto al crear el certificado que se usará para firmar el paquete final de la aplicación. Para obtener más información sobre cómo empaquetar manualmente una aplicación, consulte Creación de un paquete de aplicación con la herramienta MakeAppx.exe.

  • cmdlets de Infraestructura de clave pública (PKI)
    Necesita los cmdlets PKI para crear y exportar el certificado de firma. Para obtener más información, consulte cmdlets de infraestructura de clave pública.

Creación de un certificado autofirmado

Un certificado autofirmado es útil para probar la aplicación antes de que esté listo para publicarlo en la Tienda. Siga los pasos descritos en esta sección para crear un certificado autofirmado.

Nota:

Al crear y usar un certificado autofirmado solo los usuarios que instalan y confían en el certificado pueden ejecutar la aplicación. Esto es fácil de implementar para las pruebas, pero puede impedir que otros usuarios instalen la aplicación. Cuando esté listo para publicar la aplicación, se recomienda usar un certificado emitido por un origen de confianza. Este sistema de confianza centralizada ayuda a garantizar que el ecosistema de aplicaciones tenga niveles de comprobación para proteger a los usuarios de actores malintencionados.

Determinar el asunto de la aplicación empaquetada

Para usar un certificado para firmar el paquete de la aplicación, el "Asunto" del certificado debe coincidir con la sección "Publisher" del manifiesto de la aplicación.

Por ejemplo, la sección "Identidad" del archivo AppxManifest.xml de la aplicación debe tener un aspecto similar al siguiente:

  <Identity Name="Contoso.AssetTracker" 
    Version="1.0.0.0" 
    Publisher="CN=Contoso Software, O=Contoso Corporation, C=US"/>

El "Publicador", en este caso, es "CN=Contoso Software, O=Contoso Corporation, C=US", que debe usarse para crear el certificado.

Uso de New-SelfSignedCertificate para crear un certificado

Use el cmdlet New-SelfSignedCertificate de PowerShell para crear un certificado autofirmado. New-SelfSignedCertificate tiene varios parámetros para la personalización, pero con el fin de este artículo, nos centraremos en la creación de un certificado simple que funcionará con SignTool. Para obtener más ejemplos y usos de este cmdlet, consulte New-SelfSignedCertificate.

En función del archivo AppxManifest.xml del ejemplo anterior, debe usar la siguiente sintaxis para crear un certificado. En un símbolo del sistema de PowerShell con privilegios elevados:

New-SelfSignedCertificate -Type Custom -KeyUsage DigitalSignature -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -FriendlyName "Your friendly name goes here"

Tenga en cuenta los detalles siguientes sobre algunos de los parámetros:

  • KeyUsage: este parámetro define para qué se puede usar el certificado. Para un certificado de firma automática, este parámetro debe establecerse en DigitalSignature.

  • TextExtension: este parámetro incluye la configuración de las siguientes extensiones:

    • Uso extendido de claves (EKU): esta extensión indica fines adicionales para los que se puede usar la clave pública certificada. Para un certificado de firma automática, este parámetro debe incluir la cadena de extensión "2.5.29.37={text}1.3.6.1.5.5.7.3.3", que indica que el certificado se va a usar para la firma de código.

    • Restricciones básicas: esta extensión indica si el certificado es o no una entidad de certificación (CA). Para un certificado de firma automática, este parámetro debe incluir la cadena de extensión "2.5.29.19={text}", que indica que el certificado es una entidad final (no una CA).

Después de ejecutar este comando, el certificado se creará y agregará al almacén de certificados personal de usuario. El resultado del comando también generará la huella digital del certificado.

Puede ver el certificado en una ventana de PowerShell mediante los siguientes comandos:

Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

Esto mostrará todos los certificados en el almacén de certificados personal del usuario.

Para instalar una aplicación firmada con este certificado, el certificado debe importarse en el almacén de certificados de personas de confianza del equipo local.

Exportación del certificado a un archivo PFX

Para importar el certificado recién creado en el almacén de certificados Personas de confianza de la máquina local, primero debe exportarlo a un archivo de Intercambio de información personal (PFX) mediante el cmdlet Export-PfxCertificate.

Al usar Export-PfxCertificate, debe crear y usar una contraseña o usar el parámetro "-ProtectTo" para especificar qué usuarios o grupos pueden acceder al archivo sin una contraseña. Tenga en cuenta que se mostrará un error si no usa el parámetro "-Password" o "-ProtectTo". Se recomienda "-Password" para el uso general, mientras que "-ProtectTo" es útil cuando un controlador de dominio respalda su cuenta de usuario.

Uso de contraseñas

$password = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $password

Uso de ProtectTo

Export-PfxCertificate -cert Cert:\CurrentUser\My\<Certificate Thumbprint> -FilePath <FilePath>.pfx -ProtectTo <Username or group name>

Importa el certificado en el almacén de Personas de confianza del equipo local

Ahora que ha exportado el certificado a un archivo PFX, puede importarlo en el almacén de personas de confianza de la máquina local mediante el cmdlet Import-PfxCertificate desde una sesión de PowerShell con privilegios de administrador.

Import-PfxCertificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" -Password $password -FilePath <FilePath>.pfx

Ahora que el certificado es de confianza, está listo para firmar el paquete de la aplicación con SignTool. Para obtener el siguiente paso en el proceso de empaquetado manual, consulte Firmar un paquete de aplicación mediante SignTool.

Consideraciones de seguridad

Al agregar un certificado a los almacenes de certificados del equipo local, afecta la confianza en los certificados de todos los usuarios del equipo. Se recomienda quitar esos certificados cuando ya no sean necesarios para evitar que se usen para poner en peligro la confianza del sistema.