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



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




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

  • подписание сборки и
    было бы неправильно не подписывать?

  • какие недостатки есть в
    подписание сборок-это вызывает задержки?

717   5  

5 ответов:

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

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

необходимо ли подписывать сборки и что было бы неправильно не подписывать его?

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

какие недостатки есть в подписании сборок-это вызывает задержки?

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

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

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

Ричард Граймс написал хороший семинар О безопасности в .NET и это включает в себя главу об этом: Мастерская Безопасности

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

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

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

1. Управление версиями

2. Проверка подлинности

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

B. Authentication обозначает, не подделана ли dll и существует ли то же самое, когда это было создан.

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

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

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

  • разработка расширения оболочки Windows / Проводника Windows, например: расширение контекстного меню Проводника Windows
  • разработка расширений Visual Studio, таких как: Project/Item Template Wizard GUI

Comments

    Ничего не найдено.