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


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

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

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

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

Запустите служебную программу Pktextract.exe , указанную в пакете SDK microsoft Windows Software Development Kit (SDK), чтобы извлечь маркер открытого ключа из файла сертификата. Для правильной работы 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 , указанную в пакете SDK для Windows. Файлы сборок должны находиться в том же каталоге, что и манифест. В этом примере это каталог MySampleAssembly. Вызов Mt.exe для примера следующим образом:

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

Ниже приведен пример манифеста после выполнения Mt.exe. Обратите внимание, что запуск Mt.exe с параметром хэш-обновления добавляет хэш 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 /f <fullpath>mycompany.pfx /du https://www.mycompany.com/MySampleAssembly /t https://timestamp.digicert.com MySampleAssembly.cat

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

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