Partager via


Signature avec un nom fort pour les applications managées

La signature avec nom fort, ou l'attribution de noms forts, donne à un composant logiciel une identité globalement unique qui ne peut pas être usurpée par un tiers. Les noms forts sont utilisés pour garantir que les dépendances d'un composant et ses instructions de configuration mappent exactement la version appropriée du composant correct.

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

Pour les projets Visual C# et Visual Basic, Visual Studio permet l'attribution de noms forts via le volet Signature du Concepteur de projets ; consultez Page Signature, Concepteur de projets.

Pour les projets Visual C++, vous utilisez des options de l'éditeur de liens pour signer votre assembly ; consultez Assemblys de nom fort (signature d'assembly) (C++/CLI).

Motifs d'utilisation de l'attribution de noms forts

L'attribution de noms forts donne à une application ou à un composant une identité unique que d'autres logiciels peuvent utiliser pour y faire référence explicitement. Par exemple, l'attribution de noms forts permet aux auteurs d'applications et aux administrateurs de spécifier une version de service précise à utiliser pour un composant partagé. Cela permet à des applications différentes de spécifier des versions différentes sans affecter d'autres applications. De plus, vous pouvez utiliser le nom fort d'un composant comme preuve de sécurité pour établir une relation de confiance entre deux composants.

Éléments pouvant porter un nom fort

Vous pouvez attribuer un nom fort aux assemblys .NET Framework et aux manifestes XML. et notamment :

  • Assemblys d'application (.exe)

  • Manifestes d'application (.exe.manifest)

  • Manifestes de déploiement (.application)

  • Assemblys de composants partagés (.dll)

Éléments susceptibles de porter un nom fort

Les DLL partagées doivent posséder un nom fort. Qu'une DLL soit déployée ou non dans le Global Assembly Cache, un nom fort est recommandé lorsque la DLL n'est pas un détail d'implémentation privée de l'application, mais un service général qui peut être utilisé par plusieurs applications.

Éléments devant impérativement porter un nom fort

Vous devez attribuer un nom fort aux éléments suivants :

  • Les DLL, si vous souhaitez les déployer dans le Global Assembly Cache (GAC).

  • Les manifestes d'application et de déploiement ClickOnce. Par défaut, le système de projet Visual Studio active cette fonction pour les applications déployées par ClickOnce.

  • Les assemblys PIA (Primary Interop Assembly), qui sont utilisés pour l'interopérabilité COM. L'utilitaire TLBIMP applique l'attribution de noms forts lors de la création d'un assembly PIA (Primary Interop Assembly) à partir d'une bibliothèque de types COM.

Éléments ne devant pas porter un nom fort

En général, vous devez éviter d'attribuer un nom fort à des assemblys EXE d'application. Une application ou un composant portant un nom fort ne peut pas référencer un composant portant un nom faible. Par conséquent, l'attribution d'un nom fort à un fichier EXE empêche celui-ci de référencer des DLL portant un nom faible qui sont déployées avec l'application.

Pour cette raison, le système du projet Visual Studio n'attribue pas de nom fort aux fichiers EXE d'application. En revanche, il attribue un nom fort au manifeste d'application qui désigne en interne le fichier EXE d'application portant un nom faible.

De plus, vous pouvez empêcher l'attribution d'un nom fort à des composants privés de votre application. Dans ce cas, l'attribution de noms forts peut compliquer la gestion des dépendances et ajouter une surcharge superflue pour les composants privés.

Comment assigner un nom fort

Dans Visual Studio, vous attribuez un nom fort à une application ou à un composant à l'aide du volet Signature du Concepteur de projets. Ce volet prend en charge deux méthodes d'attribution de noms forts : à l'aide d'un fichier de clé de nom fort ou à l'aide d'un fournisseur de clé. Pour plus d'informations sur la signature des manifestes, consultez Comment : signer des manifestes d'application et de déploiement ; pour plus d'informations sur la création de fichiers de clé de nom fort (.snk), consultez Comment : créer une paire de clés publique/privée.

Lors de l'utilisation de la méthode de fichier de clé, vous pouvez utiliser un fichier de clé existant ou en créer un nouveau. Vous devez toujours protéger votre fichier de clé avec un mot de passe pour empêcher les tiers de l'utiliser.

Les fournisseurs de clé ou magasins de certificats procurent un autre moyen de sécuriser vos clés de nom fort. Certains fournisseurs de clé utilisent une carte à puce comme moyen de vérifier votre identité et d'empêcher tout risque de vol de votre clé.

Mise à jour de composants portant un nom fort

Il est impossible d'entretenir ou de mettre à niveau un composant portant un nom fort en copiant une nouvelle version sur l'ancienne.

Pour mettre à jour une DLL portant un nom faible dans un répertoire d'application, il vous suffit de copier une nouvelle version dans ce répertoire. Le Common Language Runtime (CLR) chargera la version présente physiquement.

Avec les DLL portant un nom fort, vous devez soit recompiler l'intégralité de l'application afin que toutes les références d'assembly désignent la nouvelle version, soit mettre à jour le fichier .config de l'application pour demander au runtime de charger la nouvelle version plutôt que l'ancienne.

Bien que les composants portant un nom fort requièrent un peu plus de maintenance, l'avantage est que les applications peuvent être très explicites quant aux versions des autres composants requises au moment de l'exécution.

Voir aussi

Tâches

Comment : signer des manifestes d'application et de déploiement

Comment : signer un assembly (Visual Studio)

Comment : temporiser la signature d'un assembly (Visual Studio)

Référence

Page Signature, Concepteur de projets

Concepts

Sécurisation des applications ClickOnce

Assemblys avec nom fort

Assemblys de nom fort (signature d'assembly) (C++/CLI)

Autres ressources

Gestion d'assembly et signature de manifeste