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

SignTool — это средство командной строки, используемое для цифровой подписи пакета приложения или пакета приложений с помощью сертификата.SignTool is a command line tool used to digitally sign an app package or bundle with a certificate. Сертификат может быть создан пользователем (для тестирования) или выдан компанией (для распространения).The certificate can either be created by the user (for testing purposes) or issued by a company (for distribution). Подписывание пакета приложения дает пользователю средство проверки отсутствия изменений в данных приложения после его подписи, при этом также подтверждается подлинность пользователя или компании, подписавшего пакет.Signing an app package provides the user with verification that the app's data has not been modified after it was signed while also confirming the identity of the user or company that signed it. SignTool может подписать зашифрованные и незашифрованные пакеты приложения и пакеты приложений.SignTool can sign encrypted or unencrypted app packages and bundles.

Важно!

Если для разработки приложения использовали Visual Studio, рекомендуется применять мастер Visual Studio для создания и подписывания пакета приложения.If you used Visual Studio to develop your app, it's recommended that you use the Visual Studio wizard to create and sign your app package. Дополнительные сведения см. в статьях Упаковка приложения UWP с помощью Visual Studio и упаковка классического приложения из исходного кода с помощью Visual Studio.For more information, see Package a UWP app with Visual Studio and Package a desktop app from source code using Visual Studio.

Дополнительные сведения о подписи кода и сертификатах в целом см. в разделе Знакомство с процессом подписания кода.For more information about code signing and certificates in general, see Introduction to Code Signing.

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

  • Упакованное приложениеA packaged app
    Подробнее о ручном создании пакета приложения, создания пакета приложения с помощью средства MakeAppx.exe.To learn more about manually creating an app package, see Create an app package with the MakeAppx.exe tool.

  • Действительный сертификат подписиA valid signing certificate
    Дополнительные сведения о создании или импорте действительного сертификата подписи см. в разделе Создание или импорт сертификата для подписания пакета.For more information about creating or importing a valid signing certificate, see Create or import a certificate for package signing.

  • SignTool.exeSignTool.exe
    В зависимости от пути установки пакета SDK SignTool может находиться в следующих расположениях на компьютере с Windows 10:Based on your installation path of the SDK, this is where SignTool is on your Windows 10 PC:

    • x86: C:\Program Files (x86) \Windows Kits\10\bin \ < sdk версии >\x86\SignTool.exex86: C:\Program Files (x86)\Windows Kits\10\bin\<sdk version>\x86\SignTool.exe
    • x64: C:\Program Files (x86) \Windows Kits\10\bin \ < sdk версии >\x64\SignTool.exex64: C:\Program Files (x86)\Windows Kits\10\bin\<sdk version>\x64\SignTool.exe

Применение SignToolUsing SignTool

SignTool может использоваться для подписывания файлов, проверки подписей и меток времени, удаления подписей и другого.SignTool can be used to sign files, verify signatures or timestamps, remove signatures, and more. Так как нас интересует подписывание пакета приложения, мы рассмотрим команду sign.For the purpose of signing an app package, we will focus on the sign command. Подробные сведения об инструменте SignTool см. на справочной странице SignTool.For full information on SignTool, see the SignTool reference page.

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

При использовании SignTool для подписи пакета приложения или пакета приложений, хэш-алгоритм, применяемый в SignTool, должен совпадать с алгоритмом, использованном для упаковки приложения.When using SignTool to sign your app package or bundle, the hash algorithm used in SignTool must be the same algorithm you used to package your app. Например, если вы применили MakeAppx.exe для создания пакета приложения с параметрами по умолчанию, то необходимо выбрать SHA256 в SignTool, поскольку это алгоритм, по умолчанию используемый в MakeAppx.exe.For example, if you used MakeAppx.exe to create your app package with the default settings, you must specify SHA256 when using SignTool since that's the default algorithm used by MakeAppx.exe.

Чтобы узнать, какой алгоритм хэширования применялся при упаковке приложения, извлеките содержимое пакета и изучите файл AppxBlockMap.xml.To find out which hash algorithm was used while packaging your app, extract the contents of the app package and inspect the AppxBlockMap.xml file. Инструкции по распаковке/извлечению пакета приложения см. в разделе Извлечение файлов из пакета приложения или пакета приложений.To learn how to unpack/extract an app package, see Extract files from a package or bundle. Хэш-метод указан в элементе BlockMap и имеет следующий формат:The hash method is in the BlockMap element and has this format:

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

В этой таблице показан каждое значение HashMethod и соответствующий хэш-алгоритм:This table shows each HashMethod value and its corresponding hash algorithm:

Значение HashMethodHashMethod value Хэш-алгоритмHash Algorithm
http://www.w3.org/2001/04/xmlenc#sha256 SHA256SHA256
http://www.w3.org/2001/04/xmldsig-more#sha384 SHA384SHA384
http://www.w3.org/2001/04/xmlenc#sha512 SHA512SHA512

Примечание

Так как в SignTool по умолчанию применяется алгоритм SHA1 (которого нет в MakeAppx.exe), вам всегда необходимо указывать хэш-алгоритм при использовании SignTool.Since SignTool's default algorithm is SHA1 (not available in MakeAppx.exe), you must always specify a hash algorithm when using SignTool.

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

Если у вас есть все необходимые компоненты и вы определили, какой хэш-алгоритм применялся для упаковки приложения, то вы готовы подписать его.Once you have all of the prerequisites and you've determined which hash algorithm was used to package your app, you're ready to sign it.

Общий синтаксис командной строки при подписи пакета с помощью SignTool таков:The general command line syntax for SignTool package signing is:

SignTool sign [options] <filename(s)>

Сертификат, используемый для подписания приложения, должен быть либо PFX-файлом либо установлен в хранилище сертификатов.The certificate used to sign your app must be either a .pfx file or be installed in a certificate store.

Чтобы подписать пакет приложения с помощью сертификата из PFX-файла, примените следующий синтаксис:To sign your app package with a certificate from a .pfx file, use the following syntax:

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 автоматически выбрать наиболее подходящий сертификат.Note that the /a option allows SignTool to choose the best certificate automatically.

Если ваш сертификат не является PFX-файлом, используйте следующий синтаксис:If your certificate is not a .pfx file, use the following syntax:

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 нужного сертификата вместо <Имя сертификата>, с помощью следующего синтаксиса:Alternatively, you can specify the SHA1 hash of the desired certificate instead of <Name of Certificate> using this syntax:

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

Дополнительные примеры см. в разделе Использование средства SignTool для подписания файла .For more examples, see Using SignTool to Sign a File

Обратите внимание, что с некоторыми сертификатами пароль не используется.Note that some certificates do not use a password. Если для вашего сертификата не требуется пароль, опустите параметр "/p <Ваш пароль>" в примерах команд.If your certificate does not have a password, omit "/p <Your Password>" from the sample commands.

Подписав пакет приложения с помощью действительного сертификата, вы сможете отправить пакет в Store.Once your app package is signed with a valid certificate, you're ready to upload your package to the Store. Дополнительные рекомендации по загрузке и отправке приложений в Store см. в разделе Отправка приложений.For more guidance on uploading and submitting apps to the Store, see App submissions.