Подписание пакета приложения с помощью SignTool

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

Важно!

Если для разработки приложения использовали Visual Studio, рекомендуется применять мастер Visual Studio для создания и подписывания пакета приложения. дополнительные сведения см. в статьях упаковка приложения UWP с Visual Studio и упаковка классического приложения из исходного кода с помощью Visual Studio.

Дополнительные сведения о подписи кода и сертификатах в целом см. в разделе Знакомство с процессом подписания кода.

Предварительные условия

  • Упакованное приложение
    Подробнее о ручном создании пакета приложения, создания пакета приложения с помощью средства MakeAppx.exe.

  • Действительный сертификат подписи
    Дополнительные сведения о создании или импорте действительного сертификата подписи см. в разделе Создание или импорт сертификата для подписания пакета.

  • SignTool.exe
    В зависимости от пути установки пакета SDK SignTool может находиться в следующих расположениях на компьютере с Windows 10:

    • x86: C:\Program files (x86) \ Windows \ < пакет sdk Kits\10\bin версии >\x86\SignTool.exe
    • x64: C:\Program files (x86) \ Windows \ < пакет sdk Kits\10\bin версии >\x64\SignTool.exe

Применение SignTool

SignTool может использоваться для подписывания файлов, проверки подписей и меток времени, удаления подписей и другого. Так как нас интересует подписывание пакета приложения, мы рассмотрим команду sign. Подробные сведения об инструменте SignTool см. на справочной странице SignTool.

Определение хэш-алгоритма

При использовании SignTool для подписи пакета приложения или пакета приложений, хэш-алгоритм, применяемый в SignTool, должен совпадать с алгоритмом, использованном для упаковки приложения. Например, если вы применили MakeAppx.exe для создания пакета приложения с параметрами по умолчанию, то необходимо выбрать SHA256 в SignTool, поскольку это алгоритм, по умолчанию используемый в MakeAppx.exe.

Чтобы узнать, какой алгоритм хэширования применялся при упаковке приложения, извлеките содержимое пакета и изучите файл AppxBlockMap.xml. Инструкции по распаковке/извлечению пакета приложения см. в разделе Извлечение файлов из пакета приложения или пакета приложений. Хэш-метод указан в элементе BlockMap и имеет следующий формат:

<BlockMap xmlns="http://schemas.microsoft.com/appx/2010/blockmap"
HashMethod="http://www.w3.org/2001/04/xmlenc#sha256">

В этой таблице показан каждое значение HashMethod и соответствующий хэш-алгоритм:

Значение HashMethod Хэш-алгоритм
http://www.w3.org/2001/04/xmlenc#sha256 SHA256
http://www.w3.org/2001/04/xmldsig-more#sha384 SHA384
http://www.w3.org/2001/04/xmlenc#sha512 SHA512

Примечание

Так как в SignTool по умолчанию применяется алгоритм SHA1 (которого нет в MakeAppx.exe), вам всегда необходимо указывать хэш-алгоритм при использовании SignTool.

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

Если у вас есть все необходимые компоненты и вы определили, какой хэш-алгоритм применялся для упаковки приложения, то вы готовы подписать его.

Общий синтаксис командной строки при подписи пакета с помощью SignTool таков:

SignTool sign [options] <filename(s)>

Сертификат, используемый для подписания приложения, должен быть либо PFX-файлом либо установлен в хранилище сертификатов.

Чтобы подписать пакет приложения с помощью сертификата из PFX-файла, примените следующий синтаксис:

SignTool sign /fd <Hash Algorithm> /a /f <Path to Certificate>.pfx /p <Your Password> <File path>.appx
SignTool sign /fd <Hash Algorithm> /a /f <Path to Certificate>.pfx /p <Your Password> <File path>.msix

Обратите внимание, что параметр /a позволяет SignTool автоматически выбрать наиболее подходящий сертификат.

Если ваш сертификат не является PFX-файлом, используйте следующий синтаксис:

SignTool sign /fd <Hash Algorithm> /n <Name of Certificate> <File Path>.appx
SignTool sign /fd <Hash Algorithm> /n <Name of Certificate> <File Path>.msix

Кроме того, вы можете указать хэш SHA1 нужного сертификата вместо <Имя сертификата>, с помощью следующего синтаксиса:

SignTool sign /fd <Hash Algorithm> /sha1 <SHA1 hash> <File Path>.appx
SignTool sign /fd <Hash Algorithm> /sha1 <SHA1 hash> <File Path>.msix

Дополнительные примеры см. в разделе Использование средства SignTool для подписания файла .

Обратите внимание, что с некоторыми сертификатами пароль не используется. Если для вашего сертификата не требуется пароль, опустите параметр "/p <Ваш пароль>" в примерах команд.

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