Erstellen und Verwenden von Assemblys mit starkem NamenCreate and use strong-named assemblies

Ein starker Name setzt sich aus der Identität der Assembly – dem einfachen Textnamen, der Versionsnummer und Kulturinformationen (falls vorhanden) – sowie einem öffentlichen Schlüssel und einer digitalen Signatur zusammen.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. Er wird mithilfe des entsprechenden privaten Schlüssels aus einer Assemblydatei generiert.It is generated from an assembly file using the corresponding private key. (Die Assemblydatei enthält das Assemblymanifest, das wiederum die Namen und Hashes aller Dateien enthält, die die Assembly bilden.)(The assembly file contains the assembly manifest, which contains the names and hashes of all the files that make up the assembly.)

Warnung

Verlassen Sie sich für die Sicherheit nicht auf starke Namen.Do not rely on strong names for security. Diese Namen bieten lediglich eine eindeutige Identität.They provide a unique identity only.

Eine Assembly mit starkem Namen kann nur Typen aus anderen Assemblys mit starkem Namen verwenden.A strong-named assembly can only use types from other strong-named assemblies. Andernfalls ist die Integrität der Assembly mit starkem Namen beeinträchtigt.Otherwise, the integrity of the strong-named assembly would be compromised.

Hinweis

.NET Core unterstützt Assemblys mit starkem Namen, und alle Assemblys in der .NET Core-Bibliothek sind signiert. Für die meisten Assemblys von Drittanbietern sind jedoch keine starken Namen erforderlich.Although .NET Core supports strong-named assemblies, and all assemblies in the .NET Core library are signed, the majority of third-party assemblies do not need strong names. Weitere Informationen finden Sie unter Strong Name Signing (Signieren von Assemblys mit starkem Namen) auf GitHub.For more information, see Strong Name Signing on GitHub.

Szenario für starken NamenStrong name scenario

Im folgenden Szenario wird kurz umrissen, wie eine Assembly mit einem starken Namen signiert und wie später mit diesem Namen auf sie verwiesen wird.The following scenario outlines the process of signing an assembly with a strong name and later referencing it by that name.

  1. Assembly A wird auf eine der folgenden Weisen mit einem starken Namen erstellt:Assembly A is created with a strong name using one of the following methods:

    • Durch Verwenden einer Entwicklungsumgebung, die das Erstellen starker Namen unterstützt, wie z.B. Visual Studio.Using a development environment that supports creating strong names, such as Visual Studio.

    • Durch Erstellen eines kryptografischen Schlüsselpaars mithilfe des Strong Name-Tools (Sn.exe) und Zuweisen dieses Schlüsselpaars zur Assembly unter Verwendung eines Befehlszeilencompilers oder mit dem Assemblylinker (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). Das Windows SDK stellt sowohl „Sn“.exe als auch „Al.exe“ zur Verfügung.The Windows SDK provides both Sn.exe and Al.exe.

  2. Die Entwicklungsumgebung oder das Tool signiert den Hash der Datei, die das Assemblymanifest enthält, mit dem privaten Schlüssel des Entwicklers.The development environment or tool signs the hash of the file containing the assembly's manifest with the developer's private key. Diese digitale Signatur wird in der PE (Portable Executable)-Datei gespeichert, die das Manifest von Assembly A enthält.This digital signature is stored in the portable executable (PE) file that contains Assembly A's manifest.

  3. Assembly B ist ein Consumer von Assembly A. Der Referenzabschnitt des Manifests von Assembly B enthält ein Token, das den öffentlichen Schlüssel von Assembly A darstellt.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. Ein Token ist ein Teilabschnitt des vollständigen öffentlichen Schlüssels und wird aus Platzgründen oft an Stelle des eigentlichen Schlüssels verwendet.A token is a portion of the full public key and is used rather than the key itself to save space.

  4. Die Common Language Runtime überprüft die starke Namenssignatur, wenn die Assembly im globalen Assemblycache platziert wird.The common language runtime verifies the strong name signature when the assembly is placed in the global assembly cache. Beim Binden mit starken Namen zur Runtime vergleicht die Common Language Runtime den im Manifest von Assembly B gespeicherten Schlüssel mit dem Schlüssel, der verwendet wurde, um den starken Namen von Assembly A zu generieren. Wenn die Sicherheitstests von .NET Framework durchlaufen und die Bindung abgeschlossen wurde, garantiert Assembly B, dass Bits von Assembly A nicht verändert wurden, und dass sie tatsächlich von den Entwicklern von Assembly A stammen.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.

Hinweis

Dieses Szenario löst keine Vertrauenswürdigkeitsprobleme.This scenario doesn't address trust issues. Assemblys können neben starken Namen auch vollständige Microsoft Authenticode-Signaturen tragen.Assemblies can carry full Microsoft Authenticode signatures in addition to a strong name. Authenticode-Signaturen enthalten ein Zertifikat, das Vertrauenswürdigkeit bescheinigt.Authenticode signatures include a certificate that establishes trust. Beachten Sie unbedingt, dass bei starken Namen nicht erforderlich ist, Code auf diese Weise zu signieren.It's important to note that strong names don't require code to be signed in this way. Starke Namen bieten lediglich eine eindeutige Identität.Strong names only provide a unique identity.

Umgehen der Signaturüberprüfung für vertrauenswürdige AssemblysBypass signature verification of trusted assemblies

Ab NET Framework 3.5 Service Pack 1 werden Signaturen mit starkem Namen nicht überprüft, wenn ein Assembly in eine vollständig vertrauenswürdige Anwendungsdomäne geladen wird, wie etwa die Standardanwendungsdomäne für die Zone MyComputer.Starting with the .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. Dies wird Strong-Name-Bypass-Feature genannt.This is referred to as the strong-name bypass feature. In einer vollständig vertrauenswürdigen Umgebung sind Forderungen nach StrongNameIdentityPermission für signierte, vollständig vertrauenswürdige Assemblys immer erfolgreich, unabhängig von deren Signatur.In a full-trust environment, demands for StrongNameIdentityPermission always succeed for signed, full-trust assemblies, regardless of their signature. Das Strong-Name-Bypass-Feature vermeidet in dieser Situation den Aufwand der Überprüfung der Signatur mit starkem Namen für vollständig vertrauenswürdige Assemblys. Dies ermöglicht ein schnelleres Laden der 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.

Das Bypass-Feature gilt für jede Assembly, die mit einem starken Namen signiert ist und die folgenden Eigenschaften aufweist:The bypass feature applies to any assembly that is signed with a strong name and that has the following characteristics:

  • Voll vertrauenswürdig ohne StrongName-Beweis (hat z. B. MyComputer-Zonenbeweis)Fully trusted without StrongName evidence (for example, has MyComputer zone evidence).

  • Geladen in eine voll vertrauenswürdige AppDomainLoaded into a fully trusted AppDomain.

  • Geladen von einem Speicherort unter der ApplicationBase-Eigenschaft von dieser AppDomainLoaded from a location under the ApplicationBase property of that AppDomain.

  • Nicht verzögert signiertNot delay-signed.

Diese Funktion kann für einzelne Anwendungen oder einen Computer deaktiviert werden.This feature can be disabled for individual applications or for a computer. Weitere Informationen finden Sie unter How to: Deaktivieren des Features zur Umgehung von starken Namen.See How to: Disable the strong-name bypass feature.

TitelTitle BeschreibungDescription
Vorgehensweise: Erstellen eines öffentlichen/privaten SchlüsselpaarsHow to: Create a public-private key pair Beschreibt das Erstellen eines kryptografischen Schlüsselpaars zum Signieren einer Assembly.Describes how to create a cryptographic key pair for signing an assembly.
Vorgehensweise: Signieren einer Assembly mit einem starken NamenHow to: Sign an assembly with a strong name Beschreibt das Erstellen einer Assembly mit starkem Namen.Describes how to create a strong-named assembly.
Verbesserte starke NamenEnhanced strong naming Beschreibt Erweiterungen der starken Namen in .NET Framework 4.5.Describes enhancements to strong-names in the .NET Framework 4.5.
Vorgehensweise: Verweisen auf eine Assembly mit starkem NamenHow to: Reference a strong-named assembly Beschreibt, wie auf Typen oder Ressourcen in einer Assembly mit starkem Namen zur Kompilier- oder Laufzeit verwiesen wird.Describes how to reference types or resources in a strong-named assembly at compile time or run time.
Vorgehensweise: Deaktivieren des Features zur Umgehung von starken NamenHow to: Disable the strong-name bypass feature Beschreibt, wie die Funktion, die die Validierung von Signaturen mit starkem Namen umgeht, deaktiviert wird.Describes how to disable the feature that bypasses the validation of strong-name signatures. Diese Funktion kann für alle oder bestimmte Anwendungen deaktiviert werden.This feature can be disabled for all or for specific applications.
Erstellen von AssemblysCreate assemblies Bietet eine Übersicht über Einfach- und Mehrfachdateiassemblys.Provides an overview of single-file and multifile assemblies.
Verzögern der Signierung einer Assembly in Visual StudioHow to delay sign an assembly in Visual Studio Erläutert das Signieren einer Assembly mit einem starken Namen nach dem Erstellen der Assembly.Explains how to sign an assembly with a strong name after the assembly has been created.
Sn.exe (Strong Name-Tool)Sn.exe (Strong Name tool) Beschreibt das Tool, das in .NET Framework enthalten ist, mit dem Assemblys mit starken Namen erstellt werden können.Describes the tool included in the .NET Framework that helps create assemblies with strong names. Dieses Tool stellt Optionen zum Verwalten von Schlüsseln, Erzeugen und Überprüfen von Signaturen bereit.This tool provides options for key management, signature generation, and signature verification.
Al.exe (Assembly Linker-Tool)Al.exe (Assembly linker) Beschreibt das Tool, das in .NET Framework enthalten ist, mit dem eine Datei generiert wird, die ein Assemblymanifest von Modulen oder Ressourcendateien besitzt.Describes the tool included in the .NET Framework that generates a file that has an assembly manifest from modules or resource files.