Firmar su paquete MSIX: guía completa

Esta guía le guía a través de la firma de un paquete MSIX para cada fase de desarrollo, desde pruebas locales a través de la distribución de producción. Para obtener una comparación de las opciones y los costos de firma, consulte Introducción a la firma de un paquete MSIX.

Elección de un enfoque de firma

Etapa Enfoque recomendado versión de Windows
Desarrollo y pruebas locales CLI de WinApp (certificado autofirmado) Windows 10 y versiones posteriores
Distribuir a evaluadores (carga lateral) Certificado autofirmado con el proceso de confianza del certificado Windows 10 y versiones posteriores
Distribución de producción Firma de Artefactos de Azure (anteriormente Firma de Confianza) Windows 10 versión 1809 y posteriores, Windows Server 2016 y versiones posteriores
distribución de Microsoft Store Firmado por la Tienda al ser enviado Todas las versiones de Windows admitidas

Desarrollo: firma de código para pruebas locales

Para el desarrollo local, use un certificado autofirmado. Los paquetes autofirmados solo se pueden instalar en máquinas en las que el certificado es de confianza explícita; esto es intencionado y adecuado para las pruebas.

Importante

La CLI de desarrollo de Aplicación de Windows está actualmente en public preview y requiere Windows 10 con WinGet instalado.

La CLI de WinApp controla la generación de certificados y el inicio de sesión en un solo paso.

Paso 1: Instalación de la CLI de WinApp

winget install -e --id Microsoft.WinAppCLI --source winget

Paso 2: Generación de un certificado de desarrollo autofirmado

winapp cert generate --manifest .\appxmanifest.xml --output .\devcert.pfx --install

El --manifest indicador lee el nombre del editor directamente desde appxmanifest.xml. La --install marca agrega el certificado al almacén de confianza del equipo local, por lo que puede instalar inmediatamente el paquete.

Paso 3: Firmar el paquete

winapp sign MyApp.msix --cert .\devcert.pfx

Opción B: PowerShell + SignTool (Windows 10 y versiones posteriores)

Use este enfoque si no usa la CLI de WinApp.

Paso 1: Crear un certificado autofirmado

Ejecute lo siguiente en una consola de PowerShell con permisos administrativos. El valor Subject debe coincidir exactamente con el Publisher en la appxmanifest.xml:

New-SelfSignedCertificate -Type Custom -KeyUsage DigitalSignature `
  -Subject "CN=MyPublisher" `
  -CertStoreLocation "Cert:\CurrentUser\My" `
  -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") `
  -FriendlyName "MyApp Dev Cert"

Anote la huella digital en la salida: la necesitará en los pasos siguientes.

Paso 2: Exportar el certificado a un archivo PFX

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

Paso 3: Confiar en el certificado localmente

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

Paso 4: Firmar el paquete

SignTool sign /fd SHA256 /a /f .\devcert.pfx /p "YourPassword" MyApp.msix

Para obtener el uso completo de SignTool, consulte Firmar un paquete de aplicación mediante SignTool.


Pruebas: distribuir a evaluadores con un certificado autofirmado

Para instalar un paquete MSIX autofirmado en la máquina de un evaluador, primero se debe reconocer el certificado como confiable en dicha máquina.

Nota:

En Windows 10 versión 2004 y posteriores y Windows 11, el sideloading está habilitado de forma predeterminada. En versiones anteriores de Windows 10, los evaluadores deben habilitar las aplicaciones de carga lateral en Configuración > Actualización y seguridad > Para desarrolladores.

Asigne a los evaluadores el certificado: Comparta el .pfx archivo o .cer (solo clave pública) junto con el .msix paquete.

Los evaluadores ejecutan lo siguiente en una consola de PowerShell con permisos elevados:

# If you shared a .pfx file (testers need the password)
Import-PfxCertificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" `
  -FilePath .\devcert.pfx -Password (ConvertTo-SecureString "YourPassword" -Force -AsPlainText)

# If you shared a .cer file (public key only, no password needed)
Import-Certificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" -FilePath .\devcert.cer

Después de confiar en el certificado, los testers pueden instalar el .msix haciendo doble clic.

Importante

Los certificados autofirmados solo se deben usar para las pruebas. Quítelos de las máquinas de prueba cuando ya no sean necesarias. Para una distribución amplia, use en su lugar un método de firma de confianza pública.


Producción: firma de artefactos de Azure (anteriormente Firma de confianza)

Applies to: Windows 10 versión 1809 y posteriores, Windows 11 (todas las versiones), Windows Server 2016 y versiones posteriores

Azure Firma de Artefactos es el nuevo nombre para lo que anteriormente se llamaba Firma de Confianza. El servicio es idéntico, solo el nombre ha cambiado. Es posible que todavía vea "Firma de confianza" en algunas herramientas (como la acción de GitHub azure/trusted-signing-action y el identificador de paquete winget) a medida que esas referencias se actualizan con el tiempo.

Azure Artifact Signing es la opción recomendada para la firma MSIX de producción. La reputación está vinculada a su identidad comprobada en lugar de a un certificado específico, lo que significa que la identidad del publicador crea la reputación de SmartScreen a lo largo del tiempo a medida que los usuarios instalan las aplicaciones firmadas. Consulte Firmar un paquete MSIX: descripción general para conocer los requisitos de idoneidad y la información de costos antes de configurar una cuenta.

Importante

Disponibilidad de firmas de artefactos de Azure: Organizaciones en Estados Unidos, Canadá, la Unión Europea y el Reino Unido pueden registrarse. Actualmente, los desarrolladores individuales están limitados a estados Unidos y Canadá. Si es un desarrollador individual fuera de esas regiones, use un certificado de firma de código de OV de una Autoridad de Certificación (consulte Producción: certificado de firma de código de OV a continuación).

Nota:

La firma de artefactos de Azure no proporciona confianza instantánea de SmartScreen. Al igual que los certificados OV, las aplicaciones mostrarán inicialmente una advertencia de SmartScreen hasta que la identidad del publicador genere suficiente reputación de descarga, normalmente varias semanas y cientos de instalaciones limpias. Este es el comportamiento esperado para los nuevos publicadores. Para obtener más información sobre cómo funciona la reputación de SmartScreen y qué esperar como nuevo editor, consulte reputación de SmartScreen para desarrolladores de aplicaciones de Windows.

Prerrequisitos

  • Una cuenta de firma de artefactos con la validación de identidad completada y un perfil de certificado creado. Consulte la guía rápida de firma de artefactos.
  • El rol Firmante de un Perfil de Certificado de Firma Confiable asignado a la identidad que se usa para firmar.

Paso 1: Instalar las herramientas del cliente para firmar artefactos

Las herramientas cliente de firma de artefactos incluyen el complemento dlib necesario, una versión compatible de SignTool y el entorno de ejecución de .NET 8. La sintaxis estándar de SignTool no funciona para la firma de artefactos sin este paquete.

winget install -e --id Microsoft.Azure.ArtifactSigningClientTools

Si WinGet no está disponible (por ejemplo, en un agente de compilación de Windows Server), instale a través de PowerShell como administrador:

$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri "https://download.microsoft.com/download/70ad2c3b-761f-4aa9-a9de-e7405aa2b4c1/ArtifactSigningClientTools.msi" -OutFile .\ArtifactSigningClientTools.msi
Start-Process msiexec.exe -Wait -ArgumentList '/I ArtifactSigningClientTools.msi /quiet'
Remove-Item .\ArtifactSigningClientTools.msi

Paso 2: Creación de un archivo JSON de metadatos

Cree un archivo llamado metadata.json que contenga los detalles de su cuenta de firma de artefactos. El URI del punto de conexión debe coincidir con la región de Azure en la que creó su cuenta (encuéntrela en el portal de Azure bajo su cuenta de firma de artefactos como Cuenta URI):

{
  "Endpoint": "https://<region>.codesigning.azure.net/",
  "CodeSigningAccountName": "<your-account-name>",
  "CertificateProfileName": "<your-certificate-profile-name>"
}

Para obtener la lista completa de URI de punto de conexión específicos de la región, consulte Integraciones de firma.

Paso 3: Autenticación

Establezca las credenciales de Azure como variables de entorno (use credenciales de registro de aplicaciones para CI/CD):

$env:AZURE_CLIENT_ID     = "<your-client-id>"
$env:AZURE_TENANT_ID     = "<your-tenant-id>"
$env:AZURE_CLIENT_SECRET = "<your-client-secret>"

Como alternativa, ejecute az login para realizar una firma local interactiva.

Paso 4: Firmar el paquete

Utilice el SignTool instalado con las herramientas de cliente de firma de artefactos. La /dlib marca apunta al complemento dlib instalado en el paso anterior:

signtool sign /v /fd SHA256 `
  /tr "https://timestamp.acs.microsoft.com" /td SHA256 `
  /dlib "C:\Program Files (x86)\Microsoft\ArtifactSigningClientTools\bin\Azure.CodeSigning.Dlib.dll" `
  /dmdf .\metadata.json `
  MyApp.msix

Sugerencia

Use la /debug bandera para obtener una salida detallada si la firma falla; muestra los detalles de la cadena de certificados y la autenticación.

CI/CD: Acciones de GitHub

Use el oficial azure/trusted-signing-action:

- name: Sign MSIX with Azure Artifact Signing
  uses: azure/trusted-signing-action@v0
  with:
    azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
    azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
    azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
    endpoint: ${{ secrets.AZURE_TRUSTED_SIGNING_ENDPOINT }}
    trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
    certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
    files-folder: ${{ github.workspace }}\output
    files-folder-filter: msix

Para Azure DevOps, consulte Configurar Azure DevOps con Firma Confiable.


Producción: distribución de Microsoft Store

Aplicable a: Todas las versiones de Windows compatibles

Si vas a distribuir a través de la Microsoft Store, no necesitas firmar el paquete tú mismo: la Tienda la firma durante el proceso de envío. Compile el paquete y envíelo a través del Centro de partners. El Almacén proporciona una firma digital de confianza global y maneja toda la gestión de certificados.


Producción: certificado OV de firma de código

Applies to: Windows 10 y versiones posteriores

Si la firma de artefactos no está disponible para su región o situación, puede adquirir un certificado de firma de código OV (validación de organización) de una autoridad de certificación (CA) como DigiCert, Sectigo o GlobalSign. Los costos suelen oscilar entre 300 y 500 USD al año.

Una vez que tenga un archivo PFX desde la ENTIDAD de certificación:

SignTool sign /fd SHA256 /a /f .\cert.pfx /p "YourPassword" `
  /tr http://timestamp.digicert.com /td SHA256 `
  MyApp.msix

Para obtener opciones de firma completas, consulte Firmar un paquete de aplicación mediante SignTool.

Nota:

Los certificados OV no proporcionan confianza instantánea de SmartScreen. La reputación se construye a lo largo del tiempo a medida que los paquetes firmados se instalan sin ser marcados. Para obtener más información, consulte la reputación de SmartScreen para desarrolladores de aplicaciones de Windows.