C #: зачем подписывать сборку?

В некотором коде C #, который я принял (в Visual Studio 2005), я заметил, что все сборки подписаны с тем же файлом .snk .

  • Почему предыдущий автор подписал собрания таким образом?
  • Требуется ли сбор подписей и что было бы неправильно с не подписанием?
  • Какие недостатки существуют при подписании сборок – это вызывает задержки?

Почему предыдущий автор подписал собрания таким образом?

Не знаю, может, он хотел, чтобы все его собрания были подписаны с тем же ключом.

Требуется ли сбор подписей и что было бы неправильно, если бы не подписывались?

Нет, это не обязательно, но это механизм, позволяющий вам гарантировать подлинность сборки. Это позволяет вам гарантировать, что assembly не была подделана, и действительно она исходит от этого автора. Это также необходимо, если вы хотите поместить их в GAC.

Какие недостатки существуют при подписании сборок – это вызывает задержки?

Подписанные сборки могут загружать только другие подписанные сборки. Также они привязаны к определенной версии, означающей, что вам нужно использовать переадресацию привязки или перекомпилировать приложение, если вы хотите использовать другую версию. Кроме того, из-за проверки подписи есть небольшие накладные расходы, но это настолько мало, что вас не беспокоит.

Вам нужно подписать сборки, если вы хотите поместить их в GAC .

Если вы подписываете исполняемый файл, то любые библиотеки classов, к которым он привязан, также должны быть подписаны. Это может быть сложно, если вы используете стороннюю библиотеку (особенно если вам нужно использовать элемент управления ActiveX или аналогичный).

Ричард Граймс написал хороший семинар о безопасности в .NET, и в нем есть глава об этом: Семинар по безопасности

Причиной для всех сборок, подписанных с тем же файлом .snk, может быть, если он использовал модульное тестирование с охватом кода. Чтобы обеспечить покрытие кода (по крайней мере, с инструментами, встроенными в тестовую версию Visual Studio 2005), и если сборки подписаны, вам нужно указать, какие файлы .snk используются для подписания, но я думаю, что вы можете укажите один файл .snk для всего решения, поэтому, если вы подписываете различные библиотеки classов с разными файлами .snk, вы можете только проверять охват кода на одном из них за раз.

Очень важная причина подписания сборки – значит, вы можете быть уверены, что это ваша assembly. Поскольку закрытый ключ принадлежит вам, никто другой не может подписывать сборку с тем же ключом. Это означает, что когда открытый ключ сборки является тем, который вы знаете (вы можете получить это с помощью функции GetType().Assembly.GetName().GetPublicKey() ), assembly принадлежит вам, и она не была изменена.

Несмотря на все случаи подписания dll, DLL должна быть подписана только по двум причинам

1. Версии

2. Аутентификация

а. Versioning обозначает версию, на которую была построена dll, и при нажатии на GAC две DLL с таким же именем могут существовать, но другая версия

б. Аутентификация означает, что dll не подделано и существует, когда он был создан.

Если вы хотите больше узнать об основах и подписи dll, вы можете обратиться сюда

В дополнение к существующим ответам я бы добавил, что вы должны использовать подпись, когда ваша DLL будет динамически загружаться и потребляться сторонним программным обеспечением. Это не техническое требование как таковое, но разумно, поэтому очень распространено, что сторонний производитель программного обеспечения применяет такую ​​политику из соображений безопасности.

Примеры, где вы должны подписать сборку:

  • разработка расширения Windows Shell / Windows Explorer, например: расширение контекстного меню для Windows Explorer
  • разработка расширений Visual Studio, таких как: Мастер создания шаблонов проектов / элементов
  • Как извлечь сборку из GAC?
  • Дополнительная информация о макете памяти исполняемой программы (процесса)
  • Сделать муравей тихий без флага -q?
  • Как использовать строки в emu8086
  • Не удалось загрузить файл или сборку HRESULT: 0x80131515 (При добавлении controllerа в проект MVC с ссылками на сборку на сетевом диске)
  • Размер сборки .NET влияет на производительность?
  • Maven: добавьте зависимость к банке относительным путем
  • Примеры предварительной выборки?
  • как загрузить все сборки из вашего каталога / bin
  • .Net: Запуск кода при загрузке сборки
  • Как вы прокручиваете загруженные в настоящее время сборки?
  • Давайте будем гением компьютера.