Создание сертификата для подписания пакетаCreate a certificate for package signing

В этой статье объясняется, как создать и экспортировать сертификат для подписывания пакета приложений с помощью инструментов PowerShell.This article explains how to create and export a certificate for app package signing using PowerShell tools. Мы рекомендуем использовать Visual Studio для упаковки приложений UWP и упаковки настольных приложений, но вы по-прежнему можете упаковать приложение вручную, если вы не используете Visual Studio для разработки приложения.It's recommended that you use Visual Studio for packaging UWP apps and packaging desktop apps, but you can still package an app manually if you did not use Visual Studio to develop your app.

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

  • Упакованное или распакованное приложениеA packaged or unpackaged app
    Приложение, содержащее файл AppxManifest.xml.An app containing an AppxManifest.xml file. При создании сертификата, который будет использоваться для подписывания окончательного пакета приложений, потребуется сослаться на этот файл манифеста.You will need to reference the manifest file while creating the certificate that will be used to sign the final app package. Сведения о том, как вручную упаковать приложение, см. в разделе Создание пакета приложений с помощью инструмента MakeAppx.exe.For details on how to manually package an app, see Create an app package with the MakeAppx.exe tool.

  • Командлеты инфраструктуры открытых ключей (PKI)Public Key Infrastructure (PKI) Cmdlets
    Вам потребуются командлеты PKI для создания и экспорта сертификата для подписи.You need PKI cmdlets to create and export your signing certificate. Дополнительные сведения см. в разделе Командлеты инфраструктуры открытых ключей.For more information, see Public Key Infrastructure Cmdlets.

Создание самозаверяющего сертификатаCreate a self-signed certificate

Самозаверяющий сертификат полезен для тестирования приложения, прежде чем вы будете готовы опубликовать его в магазине.A self-signed certificate is useful for testing your app before you're ready to publish it to the Store. Выполните действия, описанные в этом разделе, чтобы создать самозаверяющий сертификат.Follow the steps outlined in this section to create a self-signed certificate.

Примечание

При создании и использовании самозаверяющего сертификата только пользователи, которые устанавливают и доверяют сертификату, могут запускать приложение.When you create and use a self-signed certificate only users who install and trust your certificate can run your application. Это легко реализовать для тестирования, но это может препятствовать установке дополнительных пользователей в приложение.This is easy to implement for testing but it may prevent additional users from installing your application. Когда вы будете готовы опубликовать приложение, рекомендуется использовать сертификат, выданный доверенным источником.When you are ready to publish your application we recommend that you use a certificate issued by a trusted source. Эта система централизованного доверия помогает убедиться, что экосистема приложений имеет уровни проверки для защиты пользователей от вредоносных субъектов.This system of centralized trust helps to ensure that the application ecosystem has levels of verification to protect users from malicious actors.

Определение субъекта вашего упакованного приложенияDetermine the subject of your packaged app

Чтобы использовать сертификат для подписывания пакета приложений, значение в поле сертификата "Субъект" должно совпадать с данными в разделе "Издатель" манифеста вашего приложения.To use a certificate to sign your app package, the "Subject" in the certificate must match the "Publisher" section in your app's manifest.

Например, раздел "Идентификатор" файла AppxManifest.xml вашего приложения должен выглядеть примерно следующим образом:For example, the "Identity" section in your app's AppxManifest.xml file should look something like this:

  <Identity Name="Contoso.AssetTracker" 
    Version="1.0.0.0" 
    Publisher="CN=Contoso Software, O=Contoso Corporation, C=US"/>

"Издатель" в данном случае — "CN=Contoso Software, O=Contoso Corporation, C=US", и именно его следует использовать для создания сертификата.The "Publisher", in this case, is "CN=Contoso Software, O=Contoso Corporation, C=US" which needs to be used for creating your certificate.

Использование командлета New-SelfSignedCertificate для создания сертификатаUse New-SelfSignedCertificate to create a certificate

Используйте командлет PowerShell New-SelfSignedCertificate для создания самозаверяющего сертификата.Use the New-SelfSignedCertificate PowerShell cmdlet to create a self signed certificate. Командлет New-SelfSignedCertificate имеет несколько параметров для настройки, однако в этой статье мы сконцентрируемся на создании простого сертификата, который будет работать вместе с SignTool.New-SelfSignedCertificate has several parameters for customization, but for the purpose of this article, we'll focus on creating a simple certificate that will work with SignTool. Дополнительные примеры и варианты использования этого командлета см. в статье New-SelfSignedCertificate.For more examples and uses of this cmdlet, see New-SelfSignedCertificate.

Основываясь на файле AppxManifest.xml из предыдущего примера, используйте следующий синтаксис для создания сертификата.Based on the AppxManifest.xml file from the previous example, you should use the following syntax to create a certificate. В строке с повышенными привилегиями PowerShell:In an elevated PowerShell prompt:

New-SelfSignedCertificate -Type Custom -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -KeyUsage DigitalSignature -FriendlyName "Your friendly name goes here" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

Обратите внимание на следующие сведения о некоторых параметрах.Note the following details about some of the parameters:

  • Кэйусаже. Этот параметр определяет, для чего может использоваться сертификат.KeyUsage: This parameter defines what the certificate may be used for. Для самозаверяющего сертификата этот параметр должен иметь значение дигиталсигнатуре.For a self-signing certificate, this parameter should be set to DigitalSignature.

  • Текстекстенсион: этот параметр включает параметры для следующих расширений:TextExtension: This parameter includes settings for the following extensions:

    • Расширенное использование ключа (EKU). это расширение указывает дополнительные цели, для которых может использоваться сертифицированный открытый ключ.Extended Key Usage (EKU): This extension indicates additional purposes for which the certified public key may be used. Для самозаверяющего сертификата этот параметр должен включать строку расширения "2.5.29.37 = {text} 1.3.6.1.5.5.7.3.3", которая указывает, что сертификат должен использоваться для подписывания кода.For a self-signing certificate, this parameter should include the extension string "2.5.29.37={text}1.3.6.1.5.5.7.3.3", which indicates that the certificate is to be used for code signing.

    • Основные ограничения. это расширение указывает, является ли сертификат центром сертификации (ЦС).Basic Constraints: This extension indicates whether or not the certificate is a Certificate Authority (CA). Для самозаверяющего сертификата этот параметр должен включать строку расширения "2.5.29.19 = {Text}", которая указывает на то, что сертификат является конечной сущностью (а не центром сертификации).For a self-signing certificate, this parameter should include the extension string "2.5.29.19={text}", which indicates that the certificate is an end entity (not a CA).

После выполнения этой команды сертификат будет добавлен в локальное хранилище сертификатов, как указано в параметре "-CertStoreLocation".After running this command, the certificate will be added to the local certificate store, as specified in the "-CertStoreLocation" parameter. Результат выполнения команды также будет выдавать отпечаток сертификата.The result of the command will also produce the certificate's thumbprint.

Сертификат можно просмотреть в окне PowerShell, выполнив следующие команды:You can view your certificate in a PowerShell window by using the following commands:

Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

Это позволит отобразить все сертификаты в вашем локальном хранилище.This will display all of the certificates in your local store.

Экспорт сертификатаExport a certificate

Чтобы экспортировать сертификат из локального хранилища в файл обмена личной информацией (PFX), используйте командлет Export-PfxCertificate.To export the certificate in the local store to a Personal Information Exchange (PFX) file, use the Export-PfxCertificate cmdlet.

При использовании командлета Export-PfxCertificate следует либо создать и использовать пароль, либо с помощью параметра "-ProtectTo" указать, какие пользователи или группы могут осуществлять доступ к файлу без пароля.When using Export-PfxCertificate, you must either create and use a password or use the "-ProtectTo" parameter to specify which users or groups can access the file without a password. Обратите внимание, что если вы не используете параметр "-Password" или "-ProtectTo", отобразится ошибка.Note that an error will be displayed if you don't use either the "-Password" or "-ProtectTo" parameter.

Использование пароляPassword usage

$password = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $password

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

Export-PfxCertificate -cert Cert:\CurrentUser\My\<Certificate Thumbprint> -FilePath <FilePath>.pfx -ProtectTo <Username or group name>

После создания и экспорт сертификата вы готовы подписать пакет приложений с помощью SignTool.After you create and export your certificate, you're ready to sign your app package with SignTool. Следующий шаг в процессе упаковки вручную описан в разделе Подпись пакета приложения с использованием инструмента SignTool.For the next step in the manual packaging process, see Sign an app package using SignTool.

Замечания по безопасностиSecurity considerations

Добавив сертификат в хранилища сертификатов локальной машины, вы меняете доверие сертификатов всех пользователей на компьютере.By adding a certificate to local machine certificate stores, you affect the certificate trust of all users on the computer. Рекомендуется удалить эти сертификаты, когда они больше не требуется, чтобы их невозможно было использовать для нарушения доверия системы.It is recommended that you remove those certificates when they are no longer necessary to prevent them from being used to compromise system trust.