Signer votre paquet MSIX : guide de bout en bout

Ce guide vous guide tout au long de la signature d’un package MSIX pour chaque phase de développement , du test local à la distribution de production. Pour obtenir une comparaison des options et des coûts de signature, consultez La vue d’ensemble du package Sign an MSIX.

Choisir une approche de signature

Étape Approche recommandée version de Windows
Développement et test locaux Interface CLI WinApp (certificat autosigné) Windows 10 et versions ultérieures
Distribuer aux testeurs (chargement indépendant) Certificat auto-signé avec étape de validation du certificat Windows 10 et versions ultérieures
Distribution de production Signature d’artefact Azure (anciennement Signature de confiance) Windows 10 version 1809 et ultérieures, Windows Server 2016 et versions ultérieures
distribution sur le Microsoft Store Signé par le Windows Store lors de la soumission Toutes les versions de Windows prises en charge

Développement : Préparer une signature pour les essais locaux

Pour le développement local, utilisez un certificat auto-signé. Les packages auto-signés ne peuvent être installés que sur des ordinateurs où le certificat est explicitement approuvé, ce qui est intentionnel et approprié pour les tests.

Important

L’interface CLI de développement application Windows est actuellement en préversion public et nécessite Windows 10 avec WinGet installé.

L’interface CLI WinApp gère la génération de certificats et la connexion à une seule étape.

Étape 1 : Installer l’interface CLI WinApp

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

Étape 2 : Générer un certificat de développement auto-signé

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

L’indicateur --manifest lit le nom de l’éditeur directement à partir de votre appxmanifest.xml. L’indicateur --install ajoute le certificat au magasin d’approbations de l’ordinateur local, ce qui vous permet d’installer immédiatement votre package.

Étape 3 : Signer le package

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

Option B : PowerShell + SignTool (Windows 10 et versions ultérieures)

Utilisez cette approche si vous n’utilisez pas l’interface CLI WinApp.

Étape 1 : Créer un certificat auto-signé

Exécutez ce qui suit dans une invite PowerShell avec élévation de privilèges. La valeur Subject doit correspondre exactement à la valeur Publisher dans votre 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"

Notez l’empreinte numérique dans la sortie . Vous en aurez besoin dans les étapes suivantes.

Étape 2 : Exporter le certificat vers un fichier PFX

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

Étape 3 : Approuver le certificat localement

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

Étape 4 : Signer le package

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

Pour une utilisation complète de SignTool, consultez Signer un package d’application à l’aide de SignTool.


Test : distribuer aux testeurs avec un certificat auto-signé

Pour installer un package MSIX auto-signé sur l’ordinateur d’un testeur, le certificat doit d’abord être approuvé sur cet ordinateur.

Note

Sur Windows 10 version 2004 et ultérieure et Windows 11, le chargement indépendant est activé par défaut. Sur les versions antérieures de Windows 10, les testeurs doivent activer les applications Sideload dans Settings Update & Sécurité Pour les développeurs.

Donnez aux testeurs le certificat : Partagez le .pfx fichier ou .cer (clé publique uniquement) en même temps que le .msix package.

Les testeurs exécutent ce qui suit dans une invite PowerShell avec élévation de privilèges :

# 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

Après avoir approuvé le certificat, les testeurs peuvent installer le .msix certificat en double-cliquant dessus.

Important

Les certificats auto-signés ne doivent être utilisés que pour les tests. Supprimez-les des machines de testeur quand cela n’est plus nécessaire. Pour une distribution étendue, utilisez plutôt une méthode de signature approuvée publiquement.


Production : signature d’artefact Azure (anciennement signature approuvée)

Applies to : Windows 10 version 1809 et ultérieures, Windows 11 (toutes les versions), Windows Server 2016 et versions ultérieures

Azure Artifact Signing est le nouveau nom de ce qui était précédemment appelé Signature de confiance. Le service est identique : seul le nom a été modifié. Vous pouvez toujours voir « Signature approuvée » dans certains outils (par exemple, l’action azure/trusted-signing-action GitHub et l’ID de package winget), car ces références sont mises à jour au fil du temps.

La signature d'artefacts Azure est l'option recommandée pour la signature MSIX en production. La réputation est liée à votre identité vérifiée plutôt qu’à un certificat spécifique, ce qui signifie que votre identité d’éditeur génère la réputation smartScreen au fil du temps lorsque les utilisateurs installent vos applications signées. Consultez La vue d’ensemble d’un package MSIX pour connaître les conditions d’éligibilité et les informations de coût avant de configurer un compte.

Important

Signature d'artefacts Azure : disponibilité Les organisations aux États-Unis, au Canada, dans l'Union européenne et au Royaume-Uni peuvent s'inscrire. Les développeurs individuels sont actuellement limités aux États-Unis et au Canada. Si vous êtes un développeur individuel en dehors de ces régions, utilisez plutôt un certificat de signature de code OV à partir d’une autorité de certification (voir Production : certificat de signature de code OV ci-dessous).

Note

La signature avec Azure Artifact Signing ne pas fournir une confiance SmartScreen instantanée. Comme les certificats OV, vos applications affichent initialement un avertissement SmartScreen jusqu’à ce que votre identité d’éditeur génère une réputation de téléchargement suffisante , généralement plusieurs semaines et des centaines d’installations propres. Ce comportement est attendu pour les nouveaux éditeurs. Pour plus d’informations sur le fonctionnement de la réputation SmartScreen et à quoi s'attendre en tant que nouvel éditeur, consultez Réputation SmartScreen pour les développeurs d’applications Windows.

Prerequisites

  • Un compte de signature d’artefact avec validation d’identité achevée et création d’un profil de certificat. Consultez le guide de démarrage rapide de signature d’artefacts.
  • Le rôle de Signataire profilé du certificat de signature de confiance est attribué à l'identité utilisée pour la signature.

Étape 1 : Installer les outils clients de signature d’artefacts

Les outils client de signature d’artefact incluent le plug-in dlib requis, une version compatible de SignTool et le runtime .NET 8. La syntaxe SignTool standard ne fonctionne pas avec la signature d’artefact sans ce package.

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

Si WinGet n'est pas disponible (par exemple sur un agent de build Windows Server), installez-le via PowerShell en tant qu'administrateur :

$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

Étape 2 : Créer un fichier JSON de métadonnées

Créez un fichier nommé metadata.json avec les détails de votre compte de signature d’artefact. L’URI du point de terminaison doit correspondre à la région Azure où vous avez créé votre compte (recherchez-le dans le portail Azure sous votre compte de signature d’artefact en tant qu’URI Account URI) :

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

Pour obtenir la liste complète des URI de point de terminaison spécifiques à la région, consultez Intégrations de signature.

Étape 3 : S’authentifier

Définissez vos informations d’identification Azure en tant que variables d’environnement (utilisez les informations d’identification d’inscription d’application pour CI/CD) :

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

Ou bien, exécutez-le az login pour la signature locale interactive.

Étape 4 : Signer le package

Utilisez l’outil SignTool installé avec le client de signature d’artefacts. L’indicateur /dlib pointe vers le plug-in dlib installé à l’étape précédente :

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

Conseil / Astuce

Utilisez l’indicateur /debug pour obtenir une sortie détaillée en cas d’échec de la signature . Il affiche les détails de la chaîne de certificats et de l’authentification.

CI/CD : GitHub Actions

Utilisez le officiel 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

Pour Azure DevOps, consultez Set up Azure DevOps with Trusted Signing.


Production : distribution sur le Microsoft Store

S'applique à : Toutes les versions de Windows prises en charge

Si vous distribuez via le Microsoft Store, vous n'avez pas besoin de signer le package vous-même , le Store le signe pendant le processus de soumission. Générez votre package et envoyez-le via l’Espace partenaires. Le Windows Store fournit une signature globalement approuvée et gère toutes les gestions de certificats.


Production : certificat de signature de code OV

S'applique à : Windows 10 et versions ultérieures

Si la signature d’artefact n’est pas disponible pour votre région ou votre situation, vous pouvez acheter un certificat de signature de code OV (Validation de l’organisation) auprès d’une autorité de certification (CA) telle que DigiCert, Sectigo ou GlobalSign. Les coûts varient généralement de 300 à 500 $ par an.

Une fois que vous avez un fichier PFX à partir de votre autorité de certification :

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

Pour obtenir des options de signature complètes, consultez Signer un package d’application à l’aide de SignTool.

Note

Les certificats OV ne fournissent pas d’approbation SmartScreen instantanée. La réputation est générée au fil du temps, car vos packages signés sont installés sans être marqués d’un indicateur. Pour plus d’informations, consultez la réputation SmartScreen pour les développeurs d’applications Windows.