C#: po co podpisywać assembly?

W jakimś kodzie C#, który przejąłem (w Visual Studio 2005), zauważyłem, że wszystkie zespoły są podpisane tym samym plikiem .snk.

  • Dlaczego poprzedni autor podpisywał zgromadzenia w ten sposób?
  • czy podpisywanie zestawów jest konieczne i co byłoby źle nie podpisywać?
  • Jakie są wady w podpisywanie zestawów-czy powoduje opóźnienia?
 128
Author: Peter Mortensen, 2010-10-20

5 answers

Dlaczego poprzedni autor podpisywał zgromadzenia w ten sposób?

Nie mam pojęcia, może chciał, żeby wszystkie zgromadzenia były podpisane tym samym kluczem.

Czy podpisywanie zestawów jest konieczne i co byłoby złego w tym, że go nie podpisujemy?

Nie, nie jest to konieczne, ale jest to mechanizm pozwalający zapewnić autentyczność zestawu. Pozwala upewnić się, że montaż nie został naruszony i rzeczywiście pochodzi z tego autor. Jest to również konieczne, jeśli chcesz umieścić je w GAC.

Jakie są wady w podpisywaniu zespołów - czy powoduje to opóźnienia?

Podpisane zespoły mogą ładować tylko inne podpisane zespoły. Są one również powiązane z określoną wersją, co oznacza, że musisz użyć wiążących przekierowań lub przekompilować aplikację, jeśli chcesz użyć innej wersji. Z powodu weryfikacji podpisu jest też trochę narzutu wydajności, ale jest tak niewiele, o co nie powinieneś się martwić.

 151
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-20 07:50:06

Musisz podpisać zespoły, jeśli chcesz umieścić je w GAC .

Jeśli podpiszesz plik wykonywalny, wtedy wszystkie biblioteki klas, do których się łączy, również muszą zostać podpisane. Może to być trudne, jeśli używasz biblioteki innej firmy(zwłaszcza jeśli musisz użyć kontrolki ActiveX lub podobnej).

Richard Grimes napisał dobry warsztat na temat bezpieczeństwa w . NET i zawiera rozdział o tym: warsztaty Bezpieczeństwa

The powód, dla którego wszystkie zgromadzenia są podpisane tym samym .plik snk może być, jeśli użył testów jednostkowych z pokryciem kodu. Aby móc wykonać pokrycie kodu (przynajmniej za pomocą narzędzi wbudowanych w testową wersję Visual Studio 2005) i jeśli złoża są podpisane, musisz określić, co .pliki snk są używane do podpisywania, ale myślę, że można podać tylko jeden.plik snk dla całego rozwiązania, więc jeśli podpiszesz różne biblioteki klas różnymi .pliki snk możesz sprawdzić tylko kod pokrycie jednego z nich na raz.

 31
Author: Hans Olsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-30 17:21:38

Bardzo ważnym powodem do podpisania zespołu jest to, że możesz mieć pewność, że jest to twój zespół. Ponieważ klucz prywatny jest Twój, nikt inny nie może podpisać zestawu tym samym kluczem. Oznacza to, że jeśli klucz publiczny zestawu jest taki, który znasz (możesz go pobrać za pomocą funkcji GetType().Assembly.GetName().GetPublicKey()), to zestaw jest twój i nie został zmodyfikowany.

 15
Author: Pieter van Ginkel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 13:31:21

Pomimo wszystkich zastosowań podpisywania dll, dll powinien być podpisany tylko z dwóch powodów

1. Wersjonowanie

2. Uwierzytelnianie

A. wersjonowanie oznacza, na jakiej wersji dll został zbudowany i podczas przesuwania ich do GAC dwa dll o tej samej nazwie mogą istnieć, ale inna wersja

B. uwierzytelnianie oznacza, czy biblioteka dll nie została zmodyfikowana i istnieje tak samo, gdy została utworzona.

Jeśli chcesz zrozumieć więcej na temat podstawy i podpisywanie dll możesz odnieść tutaj

 1
Author: Karthikeyan VK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-07 17:51:49

Oprócz istniejących odpowiedzi, chciałbym dodać, że należy użyć podpisu, gdy DLL ma być dynamicznie ładowane i zużywane przez oprogramowanie innych firm. Nie jest to wymóg techniczny per se, ale jest racjonalne, dlatego bardzo powszechne, że 3rd producent oprogramowania egzekwuje taką politykę ze względu na obawy dotyczące bezpieczeństwa.

Przykłady, w których musisz podpisać Zgromadzenie:

  • Tworzenie rozszerzenia powłoki Windows / Eksploratora Windows, np.: rozszerzenie menu kontekstowego Dla Windows Explorer
  • tworzenie rozszerzeń Visual Studio, takich jak: GUI Kreatora szablonów projektów / pozycji
 0
Author: hardyVeles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-19 21:16:34