Подписание пакета приложения с помощью 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 Kits\10\bin\sdk version>\<x86\SignTool.exe
    • x64: C:\Program Files (x86)\Windows Kits\10\bin\sdk version>\<x64\SignTool.exe

Использование SignTool

SignTool можно использовать для подписывания файлов, проверки подписей или меток времени, удаления подписей и т. д. Для подписывания пакета приложения мы сосредоточимся на команде подписи . Полные сведения о 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 <ваш пароль>" из примеров команд.

После подписания пакета приложения с действительным сертификатом вы можете отправить пакет в Магазин. Дополнительные рекомендации по отправке и отправке приложений в Магазин см. в разделе "Отправка приложений".