Gérer la signature d’assemblys et de manifestes

La signature avec un nom fort fournit à un composant logiciel une identité globalement unique. L’utilisation de noms forts garantit que l’assembly ne peut pas être usurpé et que les dépendances de composants et les instructions de configuration correspondent aux composant et version de composant appropriés.

Un nom fort est constitué de l’identité de l’assembly (simple nom textuel, numéro de version et informations de culture), ainsi que d’un jeton de clé publique et d’une signature numérique.

Pour plus d’informations sur la signature d’assemblys dans les projets Visual Basic et C#, consultez Créer et utiliser des assemblys avec nom fort.

Pour plus d’informations sur la signature d’assemblys dans les projets C++, consultez Assemblys de nom fort (C++/CLI).

Notes

La signature avec nom fort ne protège pas l’assembly contre l’ingénierie à rebours. Pour se protéger de l’ingénierie à rebours, consultez Dotfuscator Community.

Types de composants et signature

Vous pouvez signer les manifestes d’application et les assemblys .NET :

  • Exécutables (.exe)

  • Manifestes d’application (.exe.manifest)

  • Manifestes de déploiement (.application)

  • Assemblys de composants partagés (.dll)

Signez les types de composants suivants :

  1. Assemblys, si vous souhaitez les déployer dans le Global Assembly Cache (GAC).

  2. Manifestes d’application et de déploiement ClickOnce. Visual Studio permet la signature par défaut pour ces applications.

  3. Assemblys PIA (Primary Interop Assembly), qui sont utilisés pour l’interopérabilité COM. L’utilitaire TLBIMP applique des noms forts pendant la création d’un assembly PIA à partir d’une bibliothèque de types COM.

En général, vous ne devez pas signer les exécutables. Un composant avec nom fort ne peut pas référencer un composant sans nom fort qui est déployé avec l’application. Visual Studio ne signe pas les exécutables d’application. En revanche, il signe le manifeste d’application, qui pointe vers l’exécutable portant un nom faible. Évitez de signer les composants qui appartiennent à votre application, car la signature peut rendre les dépendances plus difficiles à gérer.

Guide pratique pour signer un assembly dans Visual Studio

La procédure de signature d’un assembly dépend de la version du Concepteur de projets utilisée par votre projet.

Pour les projets C# .NET Core (et .NET 5 et versions ultérieures) dans Visual Studio 2022 :

  1. Ouvrez la fenêtre Propriétés du projet (cliquez avec le bouton droit sur le nœud de projet dans l’Explorateur de solutions et sélectionnez Propriétés).
  2. Sous Build, recherchez le nommage fort, puis cochez la case Signer l’assembly. Des options supplémentaires pour le fichier clé et le délai de signature apparaissent quand vous cochez la case.
  3. Spécifiez un fichier de clé. Si vous choisissez de créer un fichier de clé, les fichiers de ce type sont toujours créés au format .pfx. Vous avez besoin d’un nom et d’un mot de passe pour le nouveau fichier.

Pour les projets .NET Framework et Visual Basic dans Visual Studio 2022 ou dans Visual Studio 2019 :

  1. Ouvrez l’onglet Signature de la fenêtre Propriétés du projet (cliquez avec le bouton droit sur le nœud de projet dans l’Explorateur de solutions et sélectionnez Propriétés). Sélectionnez l’onglet Signature.
  2. Sélectionnez la case Signer l’assembly.
  3. Spécifiez un fichier de clé. Si vous choisissez de créer un fichier de clé, les fichiers de ce type sont toujours créés au format .pfx. Vous avez besoin d’un nom et d’un mot de passe pour le nouveau fichier.

Avertissement

Vous devez toujours protéger votre fichier de clé avec un mot de passe pour empêcher son utilisation par un tiers. Vous pouvez également sécuriser vos clés à l’aide des fournisseurs ou des magasins de certificats.

Vous pouvez également pointer vers une clé que vous avez déjà créée. Pour plus d’informations sur la création de clés, consultez Créer une paire de clés publique/privée.

Si vous avez accès uniquement à une clé publique, vous pouvez utiliser la signature différée pour reporter l’assignation de la clé. Vous activez la signature différée en cochant la case Différer la signature uniquement. Un projet à signature différée ne s’exécute pas, et vous ne pouvez pas le déboguer. Toutefois, vous pouvez ignorer la vérification pendant le développement à l’aide de l’option -Vr de l’outil Sn.exe (Strong Name Tool).

Pour plus d’informations sur la signature des manifestes, consultez Guide pratique pour signer des manifestes d’application et de déploiement.