Домашняя страница Как подписать C# сборку строгим именем. Использование sn.exe
Публикация
Отменить

Как подписать C# сборку строгим именем. Использование sn.exe

.Net Framework поддерживает два вида сборок: с не строгим именем (weakly named assemblies) и со строгим именем (strong named assemblies). Они отличаются только тем, что вторые подписаны при помощи пары ключей разработчика, которые однозначно идентифицируют сборку. Подписание сборки особенно актуально если она будет использоваться разными приложениями и просто необходима, если она будет размещаться в GAC (global assembly cache)

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

Рассмотрим как можно подписать свою C# библиотеку.

Создание пары ключей

Для начала нужно создать пару (открытый и закрытый) ключей, которыми будем подписывать сборку. Для этого нужно воспользоваться утилитой sn.exe, однако сначала рассмотрим более простой способ, который подойдет большинству разработчиков.

Откройте свойства проекта в Visual Studio и перейдите во вкладку Signing. В этой вкладке устанавливается ключ для подписания данной сборки. Здесь же есть возможность создать новый ключ (*.snk или *.pfx).

Для создания нового ключа выберите пункт New. Будет показано такое диалоговое окно создания нового ключа.

Если вы выберите создание ключа с паролем, то будет создан ключ с расширением *.pfx. Чтобы использовать сборку подписанную таким ключом нужно знать пароль, который был введен при создание ключа.

Если вы снимите галочку использования пароля, то будет создан *.snk ключ. Только таким ключом можно подписать C++/CLI сборки.

Файл который будет создан будет содержать пару ключей: открытого и закрытого. Открытый ключ будет встроен в библиотеку, как цифровая подпись. Закрытый ключ должен хранится в секрете и не публиковаться. Если закрытый ключ станет известен, то будет возможность подписать другую сборку этим ключом и выдать ее за вашу. Это снизит надежность такой системы, т.к. можно будет внедрить в нее вредоносный код.

sn.exe

Для создания ключей используется библиотека sn.exe. Обычно она находится по следующему пути:

1
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe

Однако вам не стоит ее использовать напрямую. Правильнее использовать ее через VS.NET command prompt. Откройте его:

Создать пару ключей вы можете введя в консоли команду:

1
sn -k keyPair.snk

Я не буду тут детально расписывать команды этой утилиты, т.к. они прекрасно описаны в MSDN и подкреплены примерами. Вот ссылка на документацию на русском языке.

Подпись библиотеки

После того, как ключ создан, нужно в свойствах проекта, во вкладке Signing выбрать его в поле Choose a strong name key file. После компиляции проекта, созданная библиотека будет им подписана.

Другие статьи по теме:

Публикация защищена лицензией CC BY 4.0 .