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

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

Обратите внимание, что изменение файлов сборки или содержимого манифеста после создания каталога сборок делает недействительными каталог и сборку. Если после создания и подписывания каталога необходимо обновить файлы сборки или манифест, необходимо снова подписать сборку и создать новый каталог.

Начните с файлов сборки, манифеста сборки и файла сертификата, который будет использоваться для подписи сборки. Размер файла сертификата должен быть не более 2048 бит. Вы не обязаны использовать доверенный сертификат. Сертификат используется только для проверки того, что сборка не повреждена.

Запустите служебную программуPktextract.exe , предоставленную в пакете sdk для Microsoft Windows, чтобы извлечь маркер открытого ключа из файла сертификата. Для правильной работы Pktextract файл сертификата должен находиться в том же каталоге, что и служебная программа. Используйте извлеченное значение маркера открытого ключа для обновления атрибута publicKeyToken элемента assemblyIdentity в файле манифеста.

Ниже приведен пример файла манифеста с именем MySampleAssembly.manifest. Сборка MySampleAssembly содержит только один файл, MYFILE.DLL. Обратите внимание, что значение атрибута publicKeyToken элемента assemblyIdentity было обновлено на значение маркера открытого ключа.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name="Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"/>
</assembly>

Затем запустите служебную программуMt.exe , предоставленную в пакете Windows SDK. Файлы сборки должны находиться в том же каталоге, что и манифест. В этом примере это каталог MySampleAssembly. Вызовите Mt.exe для примера следующим образом:

C:\ MySampleAssembly>mt.exe -manifest MySampleAssembly.manifest -hashupdate -makecdfs

Вот как выглядит пример манифеста после выполнения Mt.exe. Обратите внимание, что при выполнении Mt.exe с параметром hashupdate добавляется хэш SHA-1 файла. Не изменяйте это значение.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name=" Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"
hash="a1d362d6278557bbe965a684ac7adb4e57427a29" hashalg="SHA1"/>
</assembly>

При выполнении Mt.exe с параметром -makecdfs создается файл с именем MySampleAssembly.manifest.cdf, описывающий содержимое каталога безопасности, который будет использоваться для проверки манифеста.

Следующим шагом является запуск Makecat.exe над этим CDF-файлом, чтобы создать каталог безопасности для сборки. Вызов Makecat.exe в этом примере будет выглядеть следующим образом:

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

Последним шагом является запуск SignTool.exe для подписи файла каталога с помощью сертификата. Это должен быть тот же сертификат, который использовался в предыдущем примере для создания маркера открытого ключа. Дополнительные сведения о SignTool.exe см. в разделе SignTool . Вызов SignTool для примера будет выглядеть следующим образом:

c:\MySampleAssembly>signtool signtool /f <fullpath>mycompany.pfx /du https://www.mycompany.com/MySampleAssembly /t https://timestamp.digicert.com MySampleAssembly.cat

Если у вас есть цифровой сертификат, прошедший проверку подлинности, и ваш центр сертификации использует формат файла PVK для хранения закрытого ключа, вы можете использовать средство импорта файлов цифровых сертификатов PVK (pvkimprt.exe) для импорта ключа в поставщик служб шифрования (CSP). Эта служебная программа позволяет экспортировать данные в стандартный отраслевой формат PFX/P12. Дополнительные сведения об импорте файлов цифровых сертификатов PVK см. в разделе Ресурсы развертывания библиотеки MSDN или обратитесь в центр сертификации.

См. также статью Создание подписанных файлов и каталогов.