Erstellen eines PaketsignaturzertifikatsCreate a certificate for package signing

In diesem Artikel wird die Erstellung und der Export eines App-Paketsignaturzertifikats mithilfe von PowerShell-Tools erläutert.This article explains how to create and export a certificate for app package signing using PowerShell tools. Es wird empfohlen, Visual Studio zum Packen von UWP-apps und zum Verpacken von Desktop-Appszu verwenden. Sie können eine APP jedoch auch manuell Verpacken, wenn Sie Visual Studio nicht zum Entwickeln Ihrer APP verwendet haben.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.

VoraussetzungenPrerequisites

  • Eine Paket-oder unpaketierte AppA packaged or unpackaged app
    Eine App mit einer AppxManifest.xml-Datei.An app containing an AppxManifest.xml file. Sie müssen während der Erstellung des Zertifikats auf die Manifestdatei verweisen, die zum Signieren der endgültigen Version des App-Pakets verwendet wird.You will need to reference the manifest file while creating the certificate that will be used to sign the final app package. Details zum manuellen Verpacken von Apps finden Sie unter Erstellen eines App-Pakets mit dem Tool „MakeAppx.exe“.For details on how to manually package an app, see Create an app package with the MakeAppx.exe tool.

  • Cmdlets für Public Key-Infrastruktur (PKI)Public Key Infrastructure (PKI) Cmdlets
    Sie benötigen die PKI-Cmdlets zum Erstellen und Exportieren Ihres Signaturzertifikats.You need PKI cmdlets to create and export your signing certificate. For more information, see Public Key-Infrastruktur-Cmdlets.For more information, see Public Key Infrastructure Cmdlets.

Erstellen eines selbstsignierten ZertifikatsCreate a self-signed certificate

Ein selbst signiertes Zertifikat ist für das Testen Ihrer App nützlich, bevor Sie Sie im Store veröffentlichen können.A self-signed certificate is useful for testing your app before you're ready to publish it to the Store. Führen Sie die in diesem Abschnitt beschriebenen Schritte aus, um ein selbst signiertes Zertifikat zu erstellen.Follow the steps outlined in this section to create a self-signed certificate.

Hinweis

Wenn Sie ein selbst signiertes Zertifikat erstellen und verwenden, können nur Benutzer, die Ihr Zertifikat installieren und als vertrauenswürdig einstufen, Ihre Anwendung ausführen.When you create and use a self-signed certificate only users who install and trust your certificate can run your application. Dies ist für Tests leicht zu implementieren, verhindert jedoch möglicherweise, dass zusätzliche Benutzer Ihre Anwendung installieren.This is easy to implement for testing but it may prevent additional users from installing your application. Wenn Sie bereit sind, die Anwendung zu veröffentlichen, empfiehlt es sich, ein Zertifikat zu verwenden, das von einer vertrauenswürdigen Quelle ausgestellt wurde.When you are ready to publish your application we recommend that you use a certificate issued by a trusted source. Mit diesem System der zentralisierten Vertrauensstellung wird sichergestellt, dass das Anwendungs Ökosystem Überprüfungen verfügt, um Benutzer vor böswilligen Akteuren zu schützen.This system of centralized trust helps to ensure that the application ecosystem has levels of verification to protect users from malicious actors.

Festlegen des Betreffs Ihres App-PaketsDetermine the subject of your packaged app

Zur Verwendung eines Zertifikats für die Signatur des App-Pakets muss der Betreff im Zertifikat dem Abschnitt „Herausgeber” des App-Manifests entsprechen.To use a certificate to sign your app package, the "Subject" in the certificate must match the "Publisher" section in your app's manifest.

Beispielsweise sollte der Abschnitt „Identität” in der „AppxManifest.xml”-Datei Ihrer App etwa wie folgt aussehen: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"/>

Der „Herausgeber” ist in diesem Fall „CN=Contoso Software, O=Contoso Corporation, C=US", was zum Erstellen eines Zertifikats verwendet werden muss.The "Publisher", in this case, is "CN=Contoso Software, O=Contoso Corporation, C=US" which needs to be used for creating your certificate.

Verwenden von New-SelfSignedCertificate zum Erstellen eines ZertifikatsUse New-SelfSignedCertificate to create a certificate

Verwenden Sie das PowerShell-Cmdlet New-SelfSignedCertificate zum Erstellen eines selbstsignierten Zertifikats.Use the New-SelfSignedCertificate PowerShell cmdlet to create a self signed certificate. New-SelfSignedCertificate verfügt über mehrere anpassbare Parameter. Bei diesem Artikel konzentrieren wir uns allerdings auf das Erstellen eines einfachen Zertifikats, das mit SignTool funktioniert.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. Weitere Beispiele und Verwendungen dieses Cmdlets finden Sie unter New-SelfSignedCertificate.For more examples and uses of this cmdlet, see New-SelfSignedCertificate.

Basierend auf der „AppxManifest.xml”-Datei aus dem vorherigen Beispiel, sollten Sie folgende Syntax verwenden, um ein Zertifikat zu erstellen.Based on the AppxManifest.xml file from the previous example, you should use the following syntax to create a certificate. In einer PowerShell-Eingabeaufforderung mit erhöhten Rechten: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}")

Beachten Sie die folgenden Details zu einigen Parametern:Note the following details about some of the parameters:

  • KeyUsage: mit diesem Parameter wird definiert, wofür das Zertifikat verwendet werden kann.KeyUsage: This parameter defines what the certificate may be used for. Für ein selbst signiertes Zertifikat sollte dieser Parameter auf DigitalSignaturefestgelegt werden.For a self-signing certificate, this parameter should be set to DigitalSignature.

  • Textextension: dieser Parameter enthält Einstellungen für die folgenden Erweiterungen:TextExtension: This parameter includes settings for the following extensions:

    • Erweiterte Schlüssel Verwendung (Extended Key Usage, EKU): Diese Erweiterung gibt zusätzliche Zwecke an, für die der zertifizierte öffentliche Schlüssel verwendet werden kann.Extended Key Usage (EKU): This extension indicates additional purposes for which the certified public key may be used. Für ein selbst signiertes Zertifikat sollte dieser Parameter die Erweiterungs Zeichenfolge "2.5.29.37 = {Text} 1.3.6.1.5.5.7.3.3" enthalten, die angibt, dass das Zertifikat zum Signieren von Code verwendet werden soll.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.

    • Grundlegende Einschränkungen: Diese Erweiterung gibt an, ob es sich bei dem Zertifikat um eine Zertifizierungsstelle (Certificate Authority, ca) handelt.Basic Constraints: This extension indicates whether or not the certificate is a Certificate Authority (CA). Für ein selbst signiertes Zertifikat sollte dieser Parameter die Erweiterungs Zeichenfolge "2.5.29.19 = {Text}" enthalten, die angibt, dass das Zertifikat eine Endentität (keine Zertifizierungsstelle) ist.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).

Nach dem Ausführen dieses Befehls wird das Zertifikat dem lokalen Zertifikatspeicher hinzugefügt, wie im Parameter ‑CertStoreLocation angegeben.After running this command, the certificate will be added to the local certificate store, as specified in the "-CertStoreLocation" parameter. Durch das Ergebnis des Befehls wird auch der Fingerabdruck des Zertifikats erzeugt.The result of the command will also produce the certificate's thumbprint.

Sie können das Zertifikat mithilfe der folgenden Befehle in einem PowerShell-Fenster anzeigen: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

Dies zeigt alle Zertifikate in Ihrem lokalen Speicher an.This will display all of the certificates in your local store.

Exportieren eines ZertifikatsExport a certificate

Verwenden Sie das Export-PfxCertificate-Cmdlet, um das Zertifikat im lokalen Speicher auf eine private Informationsaustausch-Datei (PFX) zu exportieren.To export the certificate in the local store to a Personal Information Exchange (PFX) file, use the Export-PfxCertificate cmdlet.

Sie müssen bei der Verwendung von Export-PfxCertificate entweder ein Kennwort erstellen und verwenden oder den Parameter „‑ProtectTo” verwenden, um anzugeben, welche Benutzer oder Gruppen ohne Kennwort auf die Datei zugreifen können.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. Es wird eine Fehlermeldung angezeigt, wenn Sie weder den „-Kennwort”-, noch den „-ProtectTo”-Parameter verwenden.Note that an error will be displayed if you don't use either the "-Password" or "-ProtectTo" parameter.

Verwendung von KennwörternPassword usage

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

Verwendung von „ProtectTo”ProtectTo usage

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

Nachdem Sie Ihr Zertifikat erstellt und exportiert haben, sind Sie zum Signieren des App-Pakets mit SignTool bereit.After you create and export your certificate, you're ready to sign your app package with SignTool. Informationen zum nächsten Schritt bei der manuellen Verpackung finden Sie unter Signieren eines App-Pakets mithilfe von SignTool.For the next step in the manual packaging process, see Sign an app package using SignTool.

SicherheitsaspekteSecurity considerations

Das Hinzufügen eines Zertifikats zum Zertifikatspeicher des lokalen Computers wirkt sich auf die Zertifikatvertrauensstellung für alle Benutzer des Computers aus.By adding a certificate to local machine certificate stores, you affect the certificate trust of all users on the computer. Sie sollten die Zertifikate entfernen, wenn sie nicht mehr erforderlich sind, um zu verhindern, dass diese die Systemvertrauensstellung gefährden.It is recommended that you remove those certificates when they are no longer necessary to prevent them from being used to compromise system trust.