Créer et utiliser des assemblys avec nom fortCreate and use strong-named assemblies

Un nom fort est constitué de l'identité de l'assembly (son simple nom textuel, son numéro de version et des informations de culture, le cas échéant) ainsi que d'une clé publique et d'une signature numérique.A strong name consists of the assembly's identity—its simple text name, version number, and culture information (if provided)—plus a public key and a digital signature. Il est généré à partir d'un fichier d'assembly à l'aide de la clé privée correspondante.It is generated from an assembly file using the corresponding private key. (Le fichier d'assembly contient le manifeste d'assembly, qui contient les noms et les hachages de tous les fichiers composant l'assembly.)(The assembly file contains the assembly manifest, which contains the names and hashes of all the files that make up the assembly.)

Avertissement

Ne comptez pas sur les noms forts pour la sécurité.Do not rely on strong names for security. Ils fournissent seulement une identité unique.They provide a unique identity only.

Un assembly avec nom fort peut uniquement utiliser les types d'autres assemblys avec nom fort.A strong-named assembly can only use types from other strong-named assemblies. Si ce n'était pas le cas, l’intégrité de l’assembly avec nom fort serait compromise.Otherwise, the integrity of the strong-named assembly would be compromised.

Scénario de nom fortStrong name scenario

Le scénario suivant met en avant le processus de signature d'un assembly avec nom fort, puis son référencement par ce nom.The following scenario outlines the process of signing an assembly with a strong name and later referencing it by that name.

  1. L'assembly A est créé avec un nom fort à l'aide de l'une des méthodes suivantes :Assembly A is created with a strong name using one of the following methods:

    • En utilisant un environnement de développement qui prend en charge la création de noms forts, tel que Visual Studio.Using a development environment that supports creating strong names, such as Visual Studio.

    • En créant une paire de clés de chiffrement avec l’outil Strong Name (Sn.exe) et en l’assignant à l’assembly à l’aide d’un compilateur de ligne de commande ou de Assembly Linker (Al.exe).Creating a cryptographic key pair using the Strong Name tool (Sn.exe) and assigning that key pair to the assembly using either a command-line compiler or the Assembly Linker (Al.exe). Le Kit de développement logiciel (SDK) Windows fournit Sn.exe et Al.exe.The Windows Software Development Kit (SDK) provides both Sn.exe and Al.exe.

  2. L'environnement de développement ou l'outil signe le hachage du fichier contenant le manifeste de l'assembly avec la clé privée du développeur.The development environment or tool signs the hash of the file containing the assembly's manifest with the developer's private key. Cette signature numérique est stockée dans le fichier exécutable portable (PE) qui contient le manifeste de l'assembly A.This digital signature is stored in the portable executable (PE) file that contains Assembly A's manifest.

  3. L’assembly B est un consommateur de l’Assembly A. La section de référence du manifeste de l’assembly B inclut un jeton qui représente la clé publique de l’assembly A.Assembly B is a consumer of Assembly A. The reference section of Assembly B's manifest includes a token that represents Assembly A's public key. Un jeton est une partie de la clé publique complète. Il est utilisé à la place de la clé pour économiser de l'espace.A token is a portion of the full public key and is used rather than the key itself to save space.

  4. Le Common Language Runtime vérifie la signature de nom fort quand l'assembly est placé dans le Global Assembly Cache.The common language runtime verifies the strong name signature when the assembly is placed in the global assembly cache. Lors de la liaison par nom fort au moment de l’exécution, le common language runtime compare la clé stockée dans le manifeste de l’Assembly B avec la clé utilisée pour générer le nom fort de l’Assembly A. Si les vérifications de la sécurité .NET Framework et la liaison réussissent, l’Assembly B a une garantie que les bits de l’Assembly A n’ont pas été falsifiés et qu’ils proviennent réellement des développeurs de l’Assembly A.When binding by strong name at run time, the common language runtime compares the key stored in Assembly B's manifest with the key used to generate the strong name for Assembly A. If the .NET Framework security checks pass and the bind succeeds, Assembly B has a guarantee that Assembly A's bits have not been tampered with and that these bits actually come from the developers of Assembly A.

Notes

Ce scénario ne traite pas des problèmes de confiance.This scenario doesn't address trust issues. Outre un nom fort, les assemblys peuvent posséder des signatures Microsoft Authenticode complètes.Assemblies can carry full Microsoft Authenticode signatures in addition to a strong name. Les signatures Authenticode incluent un certificat établissant la confiance.Authenticode signatures include a certificate that establishes trust. Il est important de noter que les noms forts ne nécessitent pas que le code soit signé de cette manière.It's important to note that strong names don't require code to be signed in this way. Les noms forts fournissent seulement une identité unique.Strong names only provide a unique identity.

Ignorer la vérification de signature des assemblys approuvésBypass signature verification of trusted assemblies

À partir du .NET Framework 3,5 Service Pack 1.NET Framework 3.5 Service Pack 1, les signatures de nom fort ne sont pas validées quand un assembly est chargé dans un domaine d'application de confiance totale tel que le domaine de l'application par défaut pour la zone MyComputer.Starting with the .NET Framework 3,5 Service Pack 1.NET Framework 3.5 Service Pack 1, strong-name signatures are not validated when an assembly is loaded into a full-trust application domain, such as the default application domain for the MyComputer zone. Cette fonctionnalité permet d'ignorer les noms forts.This is referred to as the strong-name bypass feature. Dans un environnement de confiance totale, les demandes de StrongNameIdentityPermission aboutissent toujours pour les assemblys de confiance totale signés, quelle que soit leur signature.In a full-trust environment, demands for StrongNameIdentityPermission always succeed for signed, full-trust assemblies, regardless of their signature. La fonctionnalité consistant à ignorer les noms forts évite les traitements inutiles liés à la vérification de signature de nom fort des assemblys de confiance totale dans cette situation, ce qui permet un chargement plus rapide des assemblys.The strong-name bypass feature avoids the unnecessary overhead of strong-name signature verification of full-trust assemblies in this situation, allowing the assemblies to load faster.

Cette fonctionnalité s'applique à tout assembly signé avec un nom fort qui présente les caractéristiques suivantes :The bypass feature applies to any assembly that is signed with a strong name and that has the following characteristics:

  • Confiance totale sans preuve StrongName (par exemple, dispose de la preuve de zone MyComputer).Fully trusted without StrongName evidence (for example, has MyComputer zone evidence).

  • Chargé dans un AppDomain de confiance totale.Loaded into a fully trusted AppDomain.

  • Chargé à partir d'un emplacement sous la propriété ApplicationBase de cet AppDomain.Loaded from a location under the ApplicationBase property of that AppDomain.

  • Sans signature différée.Not delay-signed.

Cette fonctionnalité peut être désactivée pour des applications individuelles ou pour un ordinateur.This feature can be disabled for individual applications or for a computer. Voir Guide pratique pour Désactiver la fonctionnalité consistant à ignorer les noms forts.See How to: Disable the Strong-Name Bypass Feature.

TitreTitle DescriptionDescription
Guide pratique pour créer une paire de clés publique/privéeHow to: Create a Public-Private Key Pair Décrit comment créer une paire de clés de chiffrement pour signer un assembly.Describes how to create a cryptographic key pair for signing an assembly.
Guide pratique pour signer un assembly avec un nom fortHow to: Sign an Assembly with a Strong Name Décrit comment créer un assembly avec nom fort.Describes how to create a strong-named assembly.
Utilisation de noms forts améliorésEnhanced Strong Naming Décrit les améliorations apportées aux noms forts dans le .NET Framework 4.5.NET Framework 4.5.Describes enhancements to strong-names in the .NET Framework 4.5.NET Framework 4.5.
Guide pratique pour référencer un assembly avec un nom fortHow to: Reference a Strong-Named Assembly Décrit comment référencer des types ou des ressources dans un assembly avec nom fort au moment de la compilation ou de l'exécution.Describes how to reference types or resources in a strong-named assembly at compile time or run time.
Guide pratique pour désactiver la fonctionnalité consistant à ignorer les noms fortsHow to: Disable the Strong-Name Bypass Feature Décrit comment désactiver la fonctionnalité qui ignore la validation des signatures avec nom fort.Describes how to disable the feature that bypasses the validation of strong-name signatures. Cette fonctionnalité peut être désactivée pour toutes les applications ou pour des applications spécifiques.This feature can be disabled for all or for specific applications.
Création d’assemblysCreating Assemblies Fournit une vue d'ensemble des assemblys multifichiers et à fichier unique.Provides an overview of single-file and multifile assemblies.
Comment : temporiser la signature d’un assembly (Visual Studio)How to Delay Sign an Assembly in Visual Studio Explique comment signer un assembly avec un nom fort après la création de l'assembly.Explains how to sign an assembly with a strong name after the assembly has been created.
Sn.exe (outil Strong Name)Sn.exe (Strong Name Tool) Décrit l'outil inclus dans le .NET Framework qui facilite la création d'assemblys avec des noms forts.Describes the tool included in the .NET Framework that helps create assemblies with strong names. Cet outil fournit des options de gestion des clés, de génération des signatures et de vérification des signatures.This tool provides options for key management, signature generation, and signature verification.
Al.exe (Assembly Linker)Al.exe (Assembly Linker) Décrit l'outil inclus dans le .NET Framework qui génère un fichier possédant un manifeste d'assembly à partir de modules ou de fichiers de ressources.Describes the tool included in the .NET Framework that generates a file that has an assembly manifest from modules or resource files.