Signierung mit starken Namen für verwaltete Anwendungen
Aktualisiert: November 2007
Durch eine Signierung mit starkem Namen erhalten Softwarekomponenten eine global eindeutige Identität, die von Außenstehenden nicht manipuliert werden kann. Durch die Verwendung von starken Namen stellen Sie sicher, dass Komponentenabhängigkeiten und Konfigurationsanweisungen der richtigen Komponente und Komponentenversion zugeordnet werden.
Ein starker Name setzt sich aus der Identität der Assembly – dem einfachen Textnamen, der Versionsnummer und Kulturinformationen – sowie einem öffentlichen Schlüsseltoken und einer digitalen Signatur zusammen.
Bei Visual C#-Projekten und Visual Basic-Projekten wird die Signierung mit starken Namen in Visual Studio über den Bereich Signierung des Projekt-Designers aktiviert. Siehe dazu Seite "Signierung", Projekt-Designer.
Bei Visual C++-Projekten wird die Assembly über Linkeroptionen signiert. Siehe dazu Assemblys mit starken Namen (Assemblysignierung).
Gründe für die Verwendung der Signierung mit starken Namen
Starke Namen stellen eine eindeutige Identität von Anwendungen und Komponenten dar, auf die sich andere Software explizit beziehen kann. Beispielsweise ermöglichen starke Namen Programmentwicklern und Administratoren das Festlegen einer genauen Wartungsversion für eine gemeinsame Komponente. Dadurch können verschiedene Anwendungen unterschiedliche Versionen angeben, ohne andere Anwendungen zu beeinflussen. Des Weiteren kann der starke Name einer Komponente als Sicherheitsbeweis dienen, um eine Vertrauensstellung zwischen zwei Komponenten herzustellen.
Wofür können starke Namen verwendet werden?
Sie können starke Namen für .NET Framework-Assemblys und XML-Manifeste verwenden. Hierzu gehört Folgendes:
Anwendungsassemblys (.exe)
Anwendungsmanifeste (.exe.manifest)
Bereitstellungsmanifeste (.application)
Freigegebene Komponentenassemblys (.dll)
Wofür sollten starke Namen verwendet werden?
Gemeinsam genutzte DLLs sollten mit starkem Namen versehen sein. Unabhängig davon, ob eine DLL im globalen Assemblycache bereitgestellt wird, wird die Verwendung eines starken Namens empfohlen, wenn die DLL keine private Implementierungskomponente der Anwendung ist, sondern einen allgemeinen Dienst darstellt, der von mehreren Anwendungen verwendet werden kann.
Wofür müssen starke Namen verwendet werden?
Sie müssen folgende Objekte mit starkem Namen versehen:
DLLs, wenn diese im globalen Assemblycache (GAC) bereitgestellt werden sollen.
Anwendungs- und Bereitstellungsmanifeste in ClickOnce. Das Visual Studio-Projektsystem aktiviert diese Option standardmäßig für Anwendungen, die mit ClickOnce bereitgestellt werden.
Primäre Interop-Assemblys, die für die COM-Interoperabilität verwendet werden. Durch das TLBIMP-Dienstprogramm werden primäre Interop-Assemblys mit einem starken Namen erzwungen, wenn diese aus einer COM-Typbibliothek erstellt werden.
Wofür sollten starke Namen nicht verwendet werden?
Im Allgemeinen sollten Sie keine EXE-Assemblys mit starkem Namen versehen. Eine Anwendung oder Komponente mit starkem Namen kann nicht auf eine Komponente mit schwachem Namen verweisen. So wird durch die Benennung einer EXE-Datei mit einem starken Namen verhindert, dass die EXE-Datei auf mit der Anwendung bereitgestellte DLLs mit schwachem Namen verweist.
Aus diesem Grund erstellt das Visual Studio-Projektsystem keine starken Namen für EXE-Anwendungen. Stattdessen wird das Anwendungsmanifest mit einem starken Namen versehen, das intern auf die EXE-Datei der Anwendung mit schwachem Namen verweist.
Darüber hinaus sollten Sie starke Namen für private Komponenten der Anwendung vermeiden. In diesem Fall können starke Namen das Verwalten von Abhängigkeiten erschweren und zu unnötigem Verwaltungsaufwand für private Komponenten führen.
Zuweisen eines starken Namens
In Visual Studio versehen Sie eine Anwendung oder Komponente im Bereich Signierung des Projekt-Designers mit einem starken Namen. Im Bereich Signierung können Sie starke Namen entweder mit einer Schlüsseldatei für starke Namen oder über einen Schlüsselanbieter erstellen. Weitere Informationen zur Signierung von Manifesten finden Sie unter Gewusst wie: Signieren von Anwendungs- und Bereitstellungsmanifesten. Informationen zum Erstellen von Schlüsseldateien für starke Namen (SNK-Dateien) finden Sie unter Gewusst wie: Erstellen eines öffentlichen/privaten Schlüsselpaars.
Wenn Sie die Schlüsseldatei-Methode verwenden, können Sie eine vorhandene Schlüsseldatei verwenden oder eine neue Schlüsseldatei erstellen. Sie sollten die Schlüsseldatei immer mit einem Kennwort schützen, damit sie von keiner anderen Person verwendet werden kann.
Sie können Schlüssel für starke Namen auch mithilfe von Schlüsselanbietern oder Zertifikatspeichern schützen. Einige Schlüsselanbieter verwenden Smartcards, um Ihre Identität zu überprüfen und einen Diebstahl des Schlüssels zu verhindern.
Aktualisieren von Komponenten mit starkem Namen
Eine Komponente mit starkem Namen kann nicht gewartet oder aktualisiert werden, indem über die alte Version eine neue kopiert wird.
Sie können eine DLL mit einem schwachen Namen in einem Anwendungsverzeichnis aktualisieren, indem Sie eine neue Version in das Anwendungsverzeichnis kopieren. Common Language Runtime (CLR) lädt immer die Version, die im Verzeichnis vorhanden ist.
Bei DLL-Dateien mit starkem Namen müssen Sie entweder die gesamte Anwendung neu kompilieren, damit alle Assemblyverweise auf die neue Version hinweisen, oder Sie aktualisieren die CONFIG-Datei der Anwendung, um die Laufzeitkomponente anzuweisen, die neue Version anstelle der alten zu laden.
Obwohl Komponenten mit starkem Namen einer geringfügig erweiterten Wartung bedürfen, besteht der Vorteil darin, dass in den Anwendungen explizit die Versionen der erforderlichen anderen Komponenten zur Laufzeit angezeigt werden können.
Siehe auch
Aufgaben
Gewusst wie: Signieren von Anwendungs- und Bereitstellungsmanifesten
Gewusst wie: Signieren von Assemblys (Visual Studio)
Gewusst wie: Verzögertes Signieren von Assemblys (Visual Studio)
Konzepte
ClickOnce-Bereitstellung und Sicherheit
Assemblys mit starken Namen (Assemblysignierung)
Referenz
Seite "Signierung", Projekt-Designer