2010-10-20 9 views
120

In einigen C# Code habe ich übernommen (in Visual   Studio   2005), habe ich festgestellt, dass die Baugruppen alle mit der gleichen .snk Datei signiert sind.C#: Warum eine Baugruppe signieren?

  • Warum hätte der vorherige Autor die Baugruppen auf diese Weise signiert?
  • Signieren von Baugruppen notwendig und was wäre falsch mit nicht signieren?
  • Welche Nachteile gibt es in Signieren von Baugruppen - verursacht es Verzögerungen?

Antwort

138

Warum hätte der vorherige Autor die Baugruppen auf diese Weise signiert?

Keine Ahnung, vielleicht wollte er alle seine Baugruppen mit demselben Schlüssel signieren.

Ist das Signieren von Baugruppen notwendig und was wäre falsch daran, es nicht zu signieren?

Nein, es ist nicht notwendig, aber es ist ein Mechanismus, mit dem Sie die Echtheit einer Baugruppe sicherstellen können. Damit können Sie sicherstellen, dass eine Baugruppe nicht manipuliert wurde und tatsächlich von diesem Autor stammt. Es ist auch notwendig, wenn Sie sie in den GAC einfügen möchten.

Welche Nachteile gibt es beim Signieren von Baugruppen - verursacht es Verzögerungen?

Signierte Baugruppen können nur andere signierte Baugruppen laden. Außerdem sind sie an eine bestimmte Version gebunden, was bedeutet, dass Sie verbindliche Weiterleitungen verwenden müssen oder die Anwendung neu kompilieren müssen, wenn Sie eine andere Version verwenden möchten. Es gibt auch einen kleinen Leistungs-Overhead aufgrund der Überprüfung der Signatur, aber es ist so wenig, dass Sie sich keine Sorgen machen sollten.

+3

Brillante Antwort – Eon

+0

Beachten Sie, dass die Überprüfung der Signaturen nicht mehr stattfindet (seit .NET 2.0), wenn sie in GAC platziert werden; [es passiert nur einmal, wenn es zum GAC hinzugefügt wird] (http://davidyardy.com/archive/strong-names-and-signing-assemblies-netaspx/). – Abel

+0

Was denkst du darüber, es heute zu signieren? Auf webbasierten Systemen? Wenn ich richtig liege, war es nur nötig, wenn ich über installierte Software rede, oder? Wenn ich meine App mit TFS in Azure veröffentliche, weiß ich, dass sie nicht manipuliert wurde, oder? Oder fehlt mir ein Sicherheitsteil? –

31

Sie müssen Baugruppen signieren, wenn Sie sie in die GAC setzen möchten.

Wenn Sie eine ausführbare Datei signieren, müssen alle Klassenbibliotheken, mit denen sie verknüpft ist, ebenfalls signiert werden. Dies kann schwierig sein, wenn Sie eine Bibliothek eines Drittanbieters verwenden (insbesondere, wenn Sie ein ActiveX Steuerelement oder ähnliches verwenden müssen).

Richard Grimes hat eine gute Werkstatt über die Sicherheit in .NET geschrieben und das schließt ein Kapitel dazu: Security Workshop

Der Grund für alle Baugruppen mit derselben .snk Datei signiert werden könnte, wenn er Einheit verwendet Testen mit Codeabdeckung. Um Codeabdeckung zu machen (zumindest mit den in die Testversion von Visual   Studio integrierten Tools) und wenn die Assemblys signiert sind, müssen Sie angeben, welche .SNK-Dateien für das Signieren verwendet werden, aber ich denke Sie Sie können nur eine .snk-Datei für die gesamte Lösung angeben. Wenn Sie also die verschiedenen Klassenbibliotheken mit unterschiedlichen .snk-Dateien signieren, können Sie nur die Codeabdeckung für jeweils eine der beiden Klassen gleichzeitig überprüfen.

+0

Umzug nach http://www.grimes.nildram.co.uk/workshops.htm – LiamV

+0

@LiamV Dank beziehen, aktualisiert. –

15

Ein sehr wichtiger Grund, eine Baugruppe zu signieren, ist, dass Sie sicher sein können, dass es sich um Ihre Baugruppe handelt. Da der private Schlüssel Ihnen gehört, kann niemand anderes eine Assembly mit demselben Schlüssel signieren.Das heißt, wenn der öffentliche Schlüssel einer Baugruppe Ihnen bekannt ist (Sie können diesen unter Verwendung der GetType().Assembly.GetName().GetPublicKey()-Funktion abrufen), gehört die Baugruppe Ihnen und wurde nicht manipuliert.

1

Trotz aller Verwendungen von dll Unterzeichnung sollte die DLL nur aus zwei Gründen

1. Versioning

2. Authentifizierung

ein unterzeichnet werden. Versionierung gibt an, auf welcher Version die DLL erstellt wurde, und während sie in GAC gesteckt wird, können zwei DLLs mit demselben Namen existieren, aber unterschiedliche Versionen

b. Die Authentifizierung gibt an, ob die DLL nicht manipuliert wurde und existiert beim Erstellen gleich.

Wenn Sie mehr über die Grundlagen und dll verstehen Unterzeichnung Sie here

+1

Was denkst du darüber, es heute zu signieren? Auf webbasierten Systemen? Wenn ich richtig liege, war es nur nötig, wenn ich über installierte Software rede, oder? Wenn ich meine App mit TFS in Azure veröffentliche, weiß ich, dass sie nicht manipuliert wurde, oder? Oder fehlt mir ein Sicherheitsteil? –

+1

Ich sehe keinen Grund, warum wir jetzt eine dll signieren sollten, die als Paas-Lösung in azurblau eingesetzt wird. Aber wenn Sie iaas Lösung haben, können Sie die DLL durch Web-Anwendung in den gleichen iis wiederverwenden. Was ich nicht empfehle. Wir sollten sie durch api url aufrufen, anstatt diese DLLs von GAC (Microservice Architecture) zu verwenden. –