Erstellen und Verwenden von Assemblys mit starkem Namen
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. Er wird mithilfe des entsprechenden privaten Schlüssels aus einer Assemblydatei generiert. (Die Assemblydatei enthält das Assemblymanifest, das seinerseits wiederum die Namen und Hashes aller Dateien enthält, aus denen die Assembly besteht.)
Eine Assembly mit starkem Namen kann nur Typen aus anderen Assemblys mit starkem Namen verwenden. Andernfalls ist die Sicherheit der Assembly mit starkem Namen beeinträchtigt.
Diese Übersicht enthält folgende Abschnitte:
Szenario für starken Namen
Umgehen der Signaturüberprüfung für vertrauenswürdige Assemblys
Verwandte Themen
Szenario für starken Namen
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.
Assembly A wird auf eine der folgenden Weisen mit einem starken Namen erstellt:
Verwenden einer Entwicklungsumgebung, die das Erstellen starker Namen unterstützt, wie z. B. Visual Studio 2005.
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). Das Windows Software Development Kit (SDK) stellt sowohl Sn.exe als auch Al.exe zur Verfügung.
Die Entwicklungsumgebung oder das Tool signiert den Hash der Datei, die das Assemblymanifest enthält, mit dem privaten Schlüssel des Entwicklers. Diese digitale Signatur wird in der PE (Portable Executable)-Datei gespeichert, die das Manifest von Assembly A enthält.
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. Ein Token ist ein Teilabschnitt des vollständigen öffentlichen Schlüssels und wird aus Platzgründen oft an Stelle des eigentlichen Schlüssels verwendet.
Die Common Language Runtime überprüft die starke Namenssignatur, wenn die Assembly im globalen Assemblycache platziert wird. Wenn sie zur Laufzeit Bindungen durch einen starken Namen erstellen, vergleicht die Common Language Runtime den im Manifest von Assembly B gespeicherten Schlüssel mit dem Schlüssel, der für die Generierung des starken Namens für Assembly A verwendet wurde. Wenn die .NET Framework-Sicherheitsüberprüfungen erfolgreich verlaufen und die Bindung erfolgreich ist, hat Assembly B die Garantie, dass die Bits von Assembly A nicht manipuliert wurden, und dass diese Bits eigentlich von den Entwicklern der Assembly A stammen.
Hinweis |
---|
Dieses Szenario deckt keine Fragen der Vertrauenswürdigkeit ab.Assemblys können neben starken Namen auch vollständige Microsoft Authenticode-Signaturen tragen.Authenticode-Signaturen enthalten ein Zertifikat, das Vertrauenswürdigkeit bescheinigt.Beachten Sie unbedingt, dass starke Namen es nicht erforderlich machen, Code auf diese Weise zu signieren.Die Schlüssel zum Generieren einer starken Namenssignatur müssen in der Tat nicht mit denen übereinstimmen, die zum Erstellen der Authenticode-Signatur verwendet werden. |
Zurück nach oben
Umgehen der Signaturüberprüfung für vertrauenswürdige Assemblys
Ab .NET Framework, Version 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. Dies wird als Strong-Name-Bypass-Feature bezeichnet. 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. 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.
Das Bypass-Feature gilt für jede Assembly, die mit einem starken Namen signiert ist und die folgenden Eigenschaften aufweist:
Voll vertrauenswürdig ohne StrongName-Beweis (hat z. B. MyComputer-Zonenbeweis).
Geladen in eine voll vertrauenswürdige AppDomain.
Geladen von einem Speicherort unter der ApplicationBase-Eigenschaft von diesem AppDomain.
Nicht verzögert signiert.
Dieses Feature kann für einzelne Anwendungen oder einen Computer deaktiviert werden. Siehe Gewusst wie: Deaktivieren des Strong-Name-Bypass-Features.
Zurück nach oben
Verwandte Themen
Titel |
Description |
---|---|
Gewusst wie: Erstellen eines öffentlichen/privaten Schlüsselpaars |
Beschreibt das Erstellen eines kryptografischen Schlüsselpaars zum Signieren einer Assembly. |
Gewusst wie: Signieren einer Assembly mit einem starken Namen |
Beschreibt das Erstellen einer Assembly mit starkem Namen. |
Beschreibt, wie auf Typen oder Ressourcen in einer Assembly mit starkem Namen zur Kompilier- oder Laufzeit verwiesen wird. |
|
Beschreibt, wie die Funktion, die die Validierung von Signaturen mit starkem Namen umgeht, deaktiviert wird. Diese Funktion kann für alle oder bestimmte Anwendungen deaktiviert werden. |
|
Bietet eine Übersicht über Einfach- und Mehrfachdateiassemblys. |
|
Gewusst wie: Verzögertes Signieren von Assemblys (Visual Studio) |
Erläutert das Signieren einer Assembly mit einem starken Namen nach dem Erstellen der Assembly. |
Beschreibt das Tool, das in .NET Framework enthalten ist, mit dem Assemblys mit starken Namen erstellt werden können. Dieses Tool stellt Optionen zum Verwalten von Schlüsseln, Erzeugen und Überprüfen von Signaturen bereit. |
|
Beschreibt das Tool, das in .NET Framework enthalten ist, mit dem eine Datei generiert wird, die ein Assemblymanifest von Modulen oder Ressourcendateien besitzt. |
Zurück nach oben