C #: зачем подписывать собрание? - PullRequest
140 голосов
/ 20 октября 2010

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

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

Ответы [ 6 ]

172 голосов
/ 20 октября 2010

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

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

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

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

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

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

33 голосов
/ 20 октября 2010

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

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

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

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

17 голосов
/ 20 октября 2010

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

1 голос
/ 19 июня 2018

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

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

  • разработка расширения Windows Shell / Windows Explorer, например: расширение контекстного меню для Windows Explorer
  • разработка Visual Studioрасширения, такие как: Мастер шаблонов проектов / элементов GUI
1 голос
/ 07 мая 2017

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

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

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

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

б. Аутентификация обозначает, не является ли DLL-файл измененным и существует ли тот же самый, когда он был создан.

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

0 голосов
/ 15 марта 2019

Подписание и сборка важны. Чтобы гарантировать, что exe или сборка, которая установлена ​​только на этом ПК.

Т.е.: если вы скопируете эту папку и вставите в другой компьютер, она не будет работать. поскольку он подписывает эту сборку только на эту машину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...