Иллюстрированный самоучитель по Architecture .NET

Цифровая подпись и развертывание общедоступной сборки

Чтобы развернуть сборку в глобальном кэше сборок, надо, чтобы она имела цифровую подпись. Разработчики могут разместить сборку в глобальном кэше сборок, используя утилиту Gacutil.exe (Global Assembly Cache utility), Проводник Windows (Windows Explorer) с расширением оболочки Windows посредством просмотра кэша сборок, или Инструмент администрирования NET (.NET Admin Tool). Инсталляция общедоступных сборок на конкретной машине конечного пользователя должна быть сделана с помощью программы установки компонентов (системы) по выбору пользователя.

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

Зашифрованный хэш-код и открытый ключ вместе составляют полную цифровую сигнатуру (подпись). Обратите внимание, что цифровая подпись (сигнатура) записана в зарезервированную область сборки, не участвующую в вычислении хэш-кода. Когда все это сделано, сборка может быть развернута в глобальном кэше сборок (GAC). Все указанные шаги выполняются тремя простыми инструментальными средствами: утилитой Strong Name (Strong Name utilitySn.exe), компоновщиком сборок (Assembly LinkerAl.exe) и утилитой Global Assembly Cache (Global Assembly Cache utilityGacutil.exe).

Чтобы скомпоновать, подписать в цифровой форме и развертывать общедоступную сборку, необходимо выполнить следующие шаги:

  1. Разработать и скомпоновать компонент.
  2. Сгенерировать пару открытого и секретного ключей.
  3. Вычислить хэш-код содержимого сборки.
  4. Зашифровать хэш-код, используя секретный ключ.
  5. Поместить зашифрованный хэш-код в декларацию.
  6. Поместить открытый ключ в декларацию.
  7. Поместить сборку в глобальный кэш сборок.

Конечно, шаг 1 обычно выполняется с помощью Visual Studio .NET. Шаги 2-6 представляют собой цифровое подписание. Шаг 2 выполняется с помощью утилиты Strong NameSn.exe. Шаги 3-6 выполняются с помощью Visual Studio .NET или компоновщика сборок – утилиты Assembly LinkingAl .exe ("l" – это "эль", а не "один"). Чтобы на шаге 7 поместить сборку в глобальный кэш сборок, применяется утилита Global Assembly CacheGacutil.exe, Проводник Windows (Windows Explorer), или Инструмент администрирования .NET (.NET Admin Tool).

Сейчас мы опишем первый шаг– создание компонента. Для целей демонстрации мы используем пример, подобный предыдущему примеру сборки SimpleComponent, но он называется SharedComponent, и будет развернут в глобальном кэше сборок. Сначала должен быть создан новый проект SharedComponent; для этого используется шаблон Managed C++ Class Library (Управляемый C++ на основе Библиотеки классов), причем нужно добавить следующий код:

//SharedComponent.срр
#include "stdafx.h" // имеет fusing <mscorlib.dll>
#include "SharedComponent.h"
//SharedComponent.h
using namespace System;
// использование пространства имен Система;
namespace SharedComponent
// пространство имен SharedComponent
{
public _gc class SomeClass
// класс сборщика мусора SomeClass
{
public:
int AddEmUpdnt i, int j)
{
return i+j;
}
};
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.