Поделиться через


Отложенная подпись сборки

Обновлен: Ноябрь 2007

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

Во время компоновки сборки можно использовать отложенную или частичную подпись для того, чтобы зарезервировать в переносимом исполняемом файле (PE-файле) место для подписи строгого имени, а применение полноценной подписи отложить и выполнить на следующем этапе (обычно непосредственно перед поставкой сборки).

В приведенной ниже последовательности шагов отражены основные этапы отложенного подписания сборки.

  1. Получите открытый ключ, входящий в состав пары ключей, у организации, отвечающей за окончательную подпись. Обычно этот ключ предоставляется в форме SNK-файла, который может быть создан с помощью программы строгих имен (Sn.exe), входящей в состав SDK (пакет средств разработки программного обеспечения) для Windows.

  2. Включите в исходный код сборки два указанных ниже настраиваемых атрибута из пространства имен System.Reflection.

    • Атрибут AssemblyKeyFileAttribute, который передает имя файла, содержащего открытый ключ, своему конструктору в качестве параметра.

    • Атрибут AssemblyDelaySignAttribute, который указывает, что используется отложенная подпись, передавая значение true своему конструктору в качестве параметра. Пример:

          <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
          <Assembly:AssemblyDelaySignAttribute(true)>
      
          [assembly:AssemblyKeyFileAttribute("myKey.snk")]
          [assembly:AssemblyDelaySignAttribute(true)]
      
  3. Компилятор вставляет открытый ключ в манифест сборки и резервирует в PE-файле место для полной подписи строгого имени. При компоновке сборки должен использоваться подлинный открытый ключ, чтобы другие сборки, ссылающиеся на данную сборку, могли получить этот ключ и сохранить его в своих ссылках на сборку.

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

    В следующем примере производится отключение проверки сборки myAssembly.dll.

    sn –Vr myAssembly.dll
    
    t07a3dye.alert_caution(ru-ru,VS.90).gifВнимание!

    Параметр -Vr следует использовать только на этапе разработки. При добавлении сборки в список непроверяемых сборок создается уязвимость в системе безопасности. Злонамеренная сборка может использовать полное имя сборки (имя сборки, версия, язык и региональные параметры, маркер открытого ключа), добавленное в список непроверяемых, с целью подделки ее идентификации. Данный подход позволяет злонамеренной сборке также избежать проверки.

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

    В следующем примере сборка с именем myAssembly.dll подписывается строгим именем с помощью пары ключей sgKey.snk.

    sn -R myAssembly.dll sgKey.snk
    

См. также

Задачи

Практическое руководство. Создание пары открытого и закрытого ключей

Основные понятия

Создание сборок

Ссылки

Средство строгих имен (Sn.exe)

Другие ресурсы

Программирование с использованием сборок