Erstellen eines Paketsignaturzertifikats

In diesem Artikel wird erläutert, wie Sie ein Zertifikat für das Signieren von App-Paketen mithilfe von PowerShell-Tools erstellen und exportieren. Es wird empfohlen, Visual Studio zum Packen von UWP-Apps und Packen von Desktop-Apps zu verwenden, aber Sie können eine App trotzdem manuell packen, wenn Sie Visual Studio nicht zum Entwickeln Ihrer App verwendet haben.

Voraussetzungen

  • Eine gepackte oder nicht gepackte App
    Eine App, die eine AppxManifest.xml enthält. Sie müssen beim Erstellen des Zertifikats, das zum Signieren des endgültigen App-Pakets verwendet wird, auf die Manifestdatei verweisen. Weitere Informationen zum manuellen Packen einer App finden Sie unter Erstellen eines App-Pakets mit dem MakeAppx.exe Tool.

  • Public Key Infrastructure-Cmdlets (PKI)
    Sie benötigen PKI-Cmdlets, um Ihr Signaturzertifikat zu erstellen und zu exportieren. Weitere Informationen finden Sie unter Public Key-Infrastruktur-Cmdlets.

Erstellen eines selbstsignierten Zertifikats

Ein selbstsigniertes Zertifikat ist nützlich, um Ihre App zu testen, bevor Sie sie auf dem Computer veröffentlichen Store. Führen Sie die in diesem Abschnitt beschriebenen Schritte aus, um ein selbstsigniertes Zertifikat zu erstellen.

Hinweis

Wenn Sie ein selbstsigniertes Zertifikat erstellen und verwenden, können nur Benutzer, die Ihr Zertifikat installieren und vertrauen, Ihre Anwendung ausführen. Dies ist für Tests einfach zu implementieren, kann jedoch verhindern, dass zusätzliche Benutzer Ihre Anwendung installieren. Wenn Sie bereit sind, Ihre Anwendung zu veröffentlichen, wird empfohlen, ein Zertifikat zu verwenden, das von einer vertrauenswürdigen Quelle ausgestellt wurde. Dieses System zentralisierter Vertrauensstellung trägt dazu bei, sicherzustellen, dass das Anwendungsökosystem über Überprüfungsebenen verfügt, um Benutzer vor böswilligen Akteuren zu schützen.

Bestimmen des Betreffs Ihrer gepackten App

Um ein Zertifikat zum Signieren Ihres App-Pakets zu verwenden, muss der Betreff im Zertifikat mit dem Abschnitt "Publisher" im Manifest Ihrer App übereinstimmen.

Beispielsweise sollte der Abschnitt "Identität" in der AppxManifest.xml-Datei Ihrer App in etwa so aussehen:

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

Der "Publisher" ist in diesem Fall "CN=Contoso Software, O=Contoso Corporation, C=US", der zum Erstellen Ihres Zertifikats verwendet werden muss.

Verwenden von New-SelfSignedCertificate zum Erstellen eines Zertifikats

Verwenden Sie das PowerShell-Cmdlet New-SelfSignedCertificate, um ein selbstsigniertes Zertifikat zu erstellen. New-SelfSignedCertificate verfügt über mehrere Parameter für die Anpassung, aber für den Zweck dieses Artikels konzentrieren wir uns auf die Erstellung eines einfachen Zertifikats, das mit SignTool funktioniert. Weitere Beispiele und Verwendungsmöglichkeiten dieses Cmdlets finden Sie unter New-SelfSignedCertificate.

Basierend auf der AppxManifest.xml aus dem vorherigen Beispiel sollten Sie die folgende Syntax verwenden, um ein Zertifikat zu erstellen. In einer PowerShell-Eingabeaufforderung mit erhöhten Rechten:

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:

  • KeyUsage: Dieser Parameter definiert, wofür das Zertifikat verwendet werden kann. Für ein selbstsigniertes Zertifikat sollte dieser Parameter auf DigitalSignature festgelegt werden.

  • TextExtension: Dieser Parameter enthält Einstellungen für die folgenden Erweiterungen:

    • Erweiterte Schlüsselverwendung (Extended Key Usage, EKU): Diese Erweiterung gibt zusätzliche Zwecke an, für die der zertifizierte öffentliche Schlüssel verwendet werden kann. Für ein selbstsignierungsbasiertes Zertifikat sollte dieser Parameter die Erweiterungszeichenfolge "2.5.29.37={text}1.3.6.1.5.5.7.3.3" enthalten, die angibt, dass das Zertifikat für die Codesignatur verwendet werden soll.

    • Grundlegende Einschränkungen: Diese Erweiterung gibt an, ob das Zertifikat eine Zertifizierungsstelle ist. Bei einem selbstsignierenden Zertifikat sollte dieser Parameter die Erweiterungszeichenfolge "2.5.29.19={text}" enthalten, die angibt, dass das Zertifikat eine Endentität (keine Zertifizierungsstelle) ist.

Nach dem Ausführen dieses Befehls wird das Zertifikat dem lokalen Zertifikatspeicher hinzugefügt, wie im Parameter "-CertStoreLocation" angegeben. Das Ergebnis des Befehls erzeugt auch den Fingerabdruck des Zertifikats.

Sie können Ihr Zertifikat in einem PowerShell-Fenster anzeigen, indem Sie die folgenden Befehle verwenden:

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

Dadurch werden alle Zertifikate in Ihrem lokalen Speicher angezeigt.

Exportieren eines Zertifikats

Um das Zertifikat im lokalen Speicher in eine PFX-Datei (Personal Information Exchange) zu exportieren, verwenden Sie das Cmdlet Export-PfxCertificate.

Bei Verwendung von Export-PfxCertificate müssen Sie 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. Beachten Sie, dass ein Fehler angezeigt wird, wenn Sie weder den Parameter "-Password" noch den Parameter "-ProtectTo" verwenden.

Kennwortverwendung

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

ProtectTo-Nutzung

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

Nachdem Sie Ihr Zertifikat erstellt und exportiert haben, können Sie Ihr App-Paket mit SignTool signieren. Den nächsten Schritt des manuellen Paketprozesses finden Sie unter Signieren eines App-Pakets mit SignTool.

Sicherheitsüberlegungen

Durch das Hinzufügen eines Zertifikats zu zertifikatspeichernauf dem lokalen Computer wirken Sie sich auf die Zertifikatvertrauensstellung aller Benutzer auf dem Computer aus. Es wird empfohlen, diese Zertifikate zu entfernen, wenn sie nicht mehr erforderlich sind, um zu verhindern, dass sie verwendet werden, um die Systemvertrauensstellung zu gefährden.