Erstellen eines Paketsignaturzertifikats

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

Voraussetzungen

  • Eine verpackte oder unverpackte App
    Eine App mit einer AppxManifest.xml-Datei. Sie müssen beim Erstellen des Zertifikats, das zum Signieren des endgültigen App-Pakets verwendet wird, auf die Manifestdatei verweisen. Ausführliche Informationen zum manuellen Verpacken einer App finden Sie unter Erstellen eines App-Pakets mit dem MakeAppx.exe-Tool.

  • Public Key Infrastructure (PKI) Cmdlets
    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 im Store veröffentlichen können. 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 ihm vertrauen, Ihre Anwendung ausführen. Dies ist zu Testzwecken einfach zu implementieren, kann aber verhindern, dass weitere Benutzer Ihre Anwendung installieren. Wenn Sie bereit sind, Ihre Anwendung zu veröffentlichen, empfehlen wir, ein Zertifikat zu verwenden, das von einer vertrauenswürdigen Quelle ausgestellt wurde. Dieses System der zentralisierten Vertrauensstellung trägt dazu bei, dass das Anwendungsökosystem über Verifizierungsebenen verfügt, die die Benutzer vor böswilligen Akteuren schützen.

Bestimmen des Auftragsstellers Ihrer verpackten App

Um ein Zertifikat zum Signieren Ihres Anwendungspakets zu verwenden, muss der „Antragsteller“ im Zertifikat mit dem Abschnitt „Herausgeber“ im Manifest Ihrer Anwendung übereinstimmen.

Der Abschnitt „Identität“ in der Datei AppxManifest.xml Ihrer App sollte z. B. wie folgt aussehen:

  <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“, der zum Erstellen Ihres Zertifikats verwendet werden muss.

Verwenden Sie New-SelfSignedCertificate, um ein Zertifikat zu erstellen

Verwenden Sie das PowerShell-Cmdlet New-SelfSignedCertificate, um ein selbstsigniertes Zertifikat zu erstellen. New-SelfSignedCertificate hat mehrere Parameter zur Anpassung, aber für diesen Artikel 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 Datei AppxManifest.xml aus dem vorherigen Beispiel sollten Sie die folgende Syntax verwenden, um ein Zertifikat zu erstellen. In einer erweiterten PowerShell-Eingabeaufforderung:

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 selbstsignierendes 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 selbstsignierendes Zertifikat sollte dieser Parameter die Erweiterungszeichenfolge „2.5.29.37={text}1.3.6.1.5.5.7.3.3“ enthalten, was angibt, dass das Zertifikat für die Codesignierung verwendet werden soll.

    • Basiseinschränkungen: Diese Erweiterung gibt an, ob es sich bei dem Zertifikat um eine Zertifizierungsstelle (Certificate Authority, CA) handelt. Bei einem selbstsignierendes Zertifikat sollte dieser Parameter die Erweiterungszeichenfolge „2.5.29.19={text}“ enthalten, die angibt, dass es sich bei dem Zertifikat um eine Endentität (keine Zertifizierungsstelle) handelt.

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 Zertifikatfingerabdruck.

Sie können Ihr Zertifikat in einem PowerShell-Fenster mit den folgenden Befehlen anzeigen:

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

Dadurch werden alle Zertifikate in Ihrem lokalen Speicher angezeigt.

Exportieren eines Zertifikats

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

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 „-ProtectTo“ verwenden.

Verwendung des Passworts

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

Verwendung von ProtectTo

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 im manuellen Verpackungsprozess finden Sie unter Signieren eines App-Pakets mit SignTool.

Sicherheitsüberlegungen

Durch Hinzufügen eines Zertifikats zu Zertifikatspeichern des lokalen Computers wirken Sie sich auf die Vertrauenswürdigkeit der Zertifikate aller Benutzer des Computers aus. Es wird empfohlen, diese Zertifikate zu entfernen, wenn sie nicht mehr erforderlich sind, um zu verhindern, dass sie zum Kompromittieren der Systemvertrauensstellung verwendet werden.