Подтвердить что ты не робот

Подписание сборок - основы

Что значит подписать сборку? И почему это делается?

Каков самый простой способ подписать его? Что такое файл .snk для?

4b9b3361

Ответ 1

Остальные два ответа хороши, но еще одна точка. Легко запутаться между подписью "сертификат" и подписанием "сильного имени".

Цель сильного подписания имен - это, как говорит Стефан Штайнеггер: позволить вашему клиенту установить, что код, который они ДУМАЮТ, что он загружается, - это именно тот код, который они загружают. Это ВСЕ крепкие имена. В частности, сильные имена не устанавливают каких-либо доверительных отношений между вашим клиентом и вами. Если клиент решает, что они доверяют коду, который исходит от вас, это зависит от ИХ, чтобы точно определить, какое правильное сильное имя для вашего кода. Проблема "управления ключами" никоим образом не решена; у клиента есть бремя выяснить, как узнать, к какому ключу доверять.

Подписание сертификата, то есть подписка с сертификатом, который вы получаете от Verisign или какого-либо другого сертифицирующего органа, имеет гораздо более сложную цель. Цель подписания сертификата заключается в создании аутентифицированной сети доверия и удостоверений от сертифицирующего органа до организации, которая подписала код. Ваш клиент может не доверять вам, ваш клиент, возможно, даже не слышал о вас, но ваш клиент может сказать: "Если Verisign поручится за личность автора этого кода, тогда я им доверяю". Проблема управления ключами снижается для клиента, поскольку сертифицирующий орган взял на себя эту нагрузку для них.

Ответ 2

Что значит подписать сборку?

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

Почему это делается?

Во-первых, давайте сделаем важное различие. Один из способов категоризации сборок в .NET:

  • Частная ассамблея, изолирована для использования одним приложением (по умолчанию). Обычно он находится в том же каталоге, что и приложение.
  • Общая сборка, глобально доступна для всех приложений на вашем компьютере. Обычно он находится в GAC, и он должен быть подписан, т.е. Должен иметь сильное имя (состоящее из имени, версии, открытый ключ и культура собрания).

Почему? Наличие сильного имени гарантирует, что ваша сборка уникальна и что никто не может украсть GUID (как в COM), чтобы создать другой объект с тем же именем. Другими словами, вы гарантируете, что при загрузке подписанной сборки вы загружаете именно то, что, по вашему мнению, загружается. Эрик Липперт предложил отличный ответ на этот конкретный вопрос здесь.

Это не то же самое, что сказать, что подписанную сборку можно доверять. Для этого сборка может включать Authenticode, цифровую подпись для предоставления информации о разработчике/компании сборки.

Каков самый простой способ его подписания?

Ниже приведена короткая версия MSDN шаг за шагом:

  • Создайте сильный ключ, используя SN.EXE

    sn -k C:\mykey.snk

  • В Visual Studio на странице свойств проекта перейдите на вкладку "Подписание" и установите флажок "Подписать сборку", чтобы выбрать только что созданный файл Check sign assembly in Visual Studio

  • Восстановите свой проект и вуаля. Теперь ваша сборка подписана. Вы можете увидеть это в файле CSPROJ вашего проекта:

<PropertyGroup>
   <SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
   <AssemblyOriginatorKeyFile>mykey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
  1. Инструмент gacutil позволяет вам управлять общей сборкой в ​​GAC:
    • Установить: gacutil/i myassembly.dll
    • Просмотр сборки в GAC: gacutil/l myassembly.dll
    • Удалить: gacutil/u myassembly.dll

Что такое файл .SNK для?

SNK - это файл с сильным именем.

Ответ 3

Это означает, что сборка уникальна. Это делается, поэтому существует гарантия, что сборка была получена из определенного источника. См. Статью MSDN Сильно-именованные сборки. Узел с сильным именем поддерживает "Бок о бок" , Размещение сборки в GAC, Версии и несколько других функций.

Самый простой способ подписания - использовать свойства проекта в Visual Studio, вкладке подписи. Это фактически добавляет запись XML в файл .csproj, который сообщает механизму сборки подписывать сборку с указанным ключевым файлом. Ключевым файлом является этот файл .snk, который мы говорим. Он генерируется с помощью инструмента sn.exe.NET. Он содержит всю информацию, необходимую для подписи assembly.

Ответ 4

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

При подписании сборки создается и подписывается хэш с закрытым ключом. Если сборка изменена, например, вредоносным ПО, ее легко узнать, проверив хэш и подпись с помощью открытого ключа (который включен в сборку).

Подписание сборки, таким образом, защищает целевую систему от взлома. Вы можете отключить проверки подписи в конфигурации .NET. В интересах конечного пользователя проверять подписи. Подписи проверяются при загрузке сборок.

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

Самый простой способ подписать это - выбрать snk файл в настройках проекта.