Создание и использование сборок со строгими именами
Строгое имя состоит из удостоверения сборки, включающего ее простое текстовое имя, номер версии и сведения о языке и региональных параметрах (если они имеются), а также открытый ключ и цифровую подпись. Оно создается из файла сборки с использованием соответствующего закрытого ключа. (В файле сборки содержится манифест сборки, в котором указаны имена и хэши всех файлов, составляющих эту сборку.)
Warning
Строгие имена не являются средством обеспечения безопасности. Они служат только для однозначной идентификации.
Сборка со строгими именами может использовать только типы из других сборок со строгими именами. В противном случае нарушается целостность сборки со строгими именами.
Note
Хотя .NET Core поддерживает сборки со строгими именами и все сборки в библиотеке .NET Core подписаны, большинству сборок сторонних разработчиков строгие имена не требуются. Дополнительные сведения см. в разделе Подпись строгим именем в GitHub.
Сценарий со строгим именем
В следующем сценарии описывается процедура подписи сборки со строгим именем и последующая ссылка на сборку с использованием этого имени.
Сборка A создается со строгим именем с помощью одного из следующих методов.
Использование среды разработки, поддерживающей создание строгих имен, например Visual Studio.
Создание пары ключей шифрования с использованием Программы строгих имен (Sn.exe) и назначение этой пары ключей сборке с использованием компилятора командной строки или компоновщика сборок (Al.exe). Windows SDK содержит оба инструмента: Sn.exe и Al.exe.
Среда разработки или средство подписывает хэш файла, содержащего манифест сборки, закрытым ключом разработчика. Эта цифровая подпись хранится в переносимом исполняемом файле (PE), который содержит манифест сборки А.
Сборка B является потребителем сборки A. Раздел ссылок манифеста сборки B содержит токен, представляющий открытый ключ сборки А. Токен является частью полного открытого ключа и используется вместо самого ключа в целях экономии пространства.
Среда CLR проверяет подпись строгого имени, когда сборка помещается в глобальный кэш сборок. При привязке по строгому имени во время выполнения среда CLR сравнивает ключ, сохраненный в манифесте сборки B, с ключом, используемым для создания строгого имени для сборки А. Если проверки безопасности .NET пройдены и привязка выполнена успешно, у сборки B есть гарантия, что биты сборки A не были изменены и действительно получены от разработчиков сборки А.
Note
В этом сценарии не рассматриваются вопросы доверия. Помимо строгого имени сборки могут содержать полные подписи кода аутентификации Microsoft Authenticode. Подписи Authenticode включают сертификат, который устанавливает отношения доверия. Важно отметить, что строгие имена не требуют подписи кода таким способом. Строгие имена служат только для однозначной идентификации.
Обход проверки подписей в доверенных сборках
Начиная с .NET Framework 3.5 с пакетом обновления 1 (SP1), подписи строгого имени не проверяются, если сборка загружается в домен приложения с полным доверием, например в домен приложения по умолчанию для зоны MyComputer
. Это называется функцией обхода строгих имен. В среде с полным доверием всегда успешно обрабатываются запросы StrongNameIdentityPermission для подписанных сбором с полным доверием независимо от их подписи. Функция обхода строгих имен позволяет избежать ненужных затрат ресурсов для проверки подписей строгих имен в сборках с полным доверием, что позволяет быстрее загружать такие сборки.
Функция обхода применима к любой сборке, подписанной со строгим именем и имеющей следующие характеристики.
Полное доверие без доказательства StrongName (например, при наличии доказательства зоны
MyComputer
).Загрузка в домен AppDomain с полным доверием.
Загрузка из расположения со свойством ApplicationBase домена AppDomain.
Подпись осуществлена без задержки.
Эту возможность можно отключить для отдельных приложений или для компьютера. См. практическое руководство по Отключение функции пропуска строгих имен.
См. также
Заголовок | Описание |
---|---|
Практическое руководство. Создание пары открытого и закрытого ключей | Описывает способ создания пары криптографических ключей для подписи сборки. |
Практическое руководство. Подписание сборки строгим именем | Описывает способ создания сборки со строгим именем. |
Усовершенствованное строгое именование | Описывает усовершенствования в использовании строгих имен в .NET Framework 4.5. |
Практическое руководство. Ссылка на сборку со строгим именем | Содержит инструкции по созданию ссылок на типы или ресурсы в сборке со строгим именем во время компиляции или выполнения. |
Практическое руководство. Отключение функции пропуска строгих имен | Содержит инструкции по отключению возможности обхода проверки подписей строгих имен. Эту возможность можно отключить для всех приложений или только для некоторых из них. |
Создание сборок | Содержит обзор однофайловых и многофайловых сборок. |
Использование задержки при подписи сборки в Visual Studio | Содержит инструкции по подписи сборки строгим именем после создания сборки. |
Sn.exe (средство строгих имен) | Описывает средство в составе .NET Framework, которое помогает создавать сборки со строгими именами. Это средство предусматривает параметры для управления ключами, генерации подписи и ее проверки. |
Al.exe (компоновщик сборок) | Описывает средство, включенное в .NET Framework, которое создает файл с манифестом сборки из модулей или файлов ресурсов. |