webentwicklung-frage-antwort-db.com.de

So erstellen Sie ein funktionierendes vertrauenswürdiges und/oder selbstsigniertes Zertifikat für eine Windows 10 UWP-Anwendung über Visual Studio 2017 und 2015

Nach dieser Dokumentation:

https://docs.Microsoft.com/de-de/windows-hardware/drivers/devtest/makecert

Der folgende Befehl beschreibt das Erstellen einer Windows-Cer-Datei (d. H. Eines Zertifikats von einem vertrauenswürdigen Anbieter). 

Das Problem dabei ist, dass beim Erstellen einer Anwendung in Visual Studio 2017 nur über das package.windows10.appxmanifest eine pfx-Datei zulässig ist. Wenn Sie diese Befehlszeilenreferenz aktualisieren, wird keine Pvk-Datei erstellt, und Sie müssen sie hinzufügen 

MakeCert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" testcert.cer

zusätzliche Befehlszeilenoptionen wie/sv SubjectKeyFile, die die resultierende pvk-Datei erzeugen. 

Allerdings auch mit dieser Befehlszeilenreferenz:

MakeCert -r -pe -ss PrivateCertStore -n "CN=Contoso.com(Test)" -sv testcert.pvk testcert.cer

Die resultierende Implantation der cert-Datei in Visual Studio führt zu diesem Fehler:

Der Manifest-Designer konnte das Zertifikat nicht importieren. 

Das ausgewählte Zertifikat ist nicht zum Signieren gültig, da es abgelaufen ist oder ein anderes Problem vorliegt. Weitere Informationen finden Sie unter http://go.Microsoft.com/fwlink/?LinkID=241478

Ich gehe zum Link und nichts erklärt wirklich was los ist. Eine Person kommentiert ein temporäres, das funktioniert, aber es ist ein nichtspezifisches Testzertifikat, das nur ein Jahr dauert. 

Gibt es eine bessere Möglichkeit, das Skript mit makecert zu erstellen? Woher weiß ich, ob das Zertifikat letztendlich korrekt erstellt wird oder nicht? Zusätzliche Dokumentation wäre hilfreich, aber ich habe nichts anderes gefunden. 

7

Die Antwort von @nico hat korrekte Aussagen, aber sie hat mir klar gemacht, dass das Problem mehr war, als ich anfangs beschrieben hatte. Also habe ich den Fragetitel und die Frage aufgeräumt, um eine bessere Frage und nachfolgende Antwort zu geben.

Durch das Internet erschöpft, fand ich viele dieser Antworten an so vielen verschiedenen Orten, d. H. Fragen, Antworten in Kommentaren, Youtube usw. Ich habe mich entschieden, sie alle hier an einem schönen Ort zu platzieren, damit jeder Ressourcen finden und lernen kann. 

Zuerst muss man sich fragen, wofür sie die Anwendung verwenden. Wird die Anwendung in den Microsoft Store hochgeladen oder darf sie nur intern verwendet werden? 

So oder so wollen Sie die Anwendung debuggen und entwickeln. Für das Debugging muss kein Zertifikat installiert werden. In diesem Sinne sind wir also sicher. 

Wenn Sie die Anwendung intern für Ihre Organisation oder einfach auf Ihrem lokalen Computer verwenden, benötigen Sie ein vertrauenswürdiges Zertifikat. 

Dieses Zertifikat kann in verschiedenen Szenarien existieren. 

  1. Benötigen Sie ein selbstsigniertes Zertifikat oder?
  2. Benötigen Sie ein ausgestelltes Zertifikat von einer Zertifizierungsstelle der Zertifizierungsstelle, d. H. Ihrem Unternehmen oder Ihrer Organisation? 

Ich werde beide Szenarien durchgehen. In beiden Fällen ist das Protokoll von makecert abgelehnt. 

Szenario 1: Wenn Sie ein selbstsigniertes Zertifikat benötigen, gehen Sie folgendermaßen vor.

  1. Wechseln Sie zu Powershell, und verwenden Sie das Cmdlet New-SelfSignedCertificate pkiclient. Sie erhalten dann die Erstellung eines .cer und eines entsprechenden privaten Schlüssels + eines öffentlichen Zertifikats = .pfx, wenn Sie für den cert + privaten Schlüssel erstellen. Und Sie müssen über einen privaten Schlüssel, dh .pfx, verfügen, um Ihre Anwendung mit Visual Studio zu bündeln und zu verpacken und im lokalen Windows-Anwendungsspeicher zu installieren (nicht mit dem Microsoft-Speicher zu verwechseln.)

Hier sind die Links, die folgen sollen *** Lesen Sie unbedingt 1A, bevor Sie Ihr Zertifikat erstellen:

Zertifikatpaket-Signatur erstellen
New-SelfSignedCertificate

1A. *** Wenn Sie das New-SelfSignedCertificate erstellen, müssen Sie verstehen, dass das Zertifikat auf eine bestimmte Weise erstellt werden muss. Dies ist für ein selbstsigniertes oder von einer Zertifizierungsstelle ausgestelltes Zertifikat.

Insbesondere muss das Zertifikat 2 Eigenschaften besitzen 

ein). Es muss eine Basic Constraints-Erweiterung vorhanden sein, die auf Subject Type = End Entity gesetzt ist. In einfachen Worten heißt das Folgendes: Wenn dieses Zertifikat an Sie ausgestellt wird, können Sie das Zertifikat nicht zu einer weiteren nachfolgenden Zertifizierungsstelle mit der Fähigkeit, weitere Zertifikate auszustellen, haben. Mit anderen Worten ... Dies ist ein Ende des Zeilenzertifikats. 

Weitere Informationen zu Einschränkungen finden Sie hier: https://blogs.technet.Microsoft.com/pki/2014/03/05/constraints-what-they-are-and-how-theyre-used/)

b). Der Wert der Erweiterung "Enahnced Key Usage" (EKU) ist auf "Code Signing" gesetzt. Dadurch wird verhindert, dass das Zertifikat für einen anderen Zweck als für den vorgesehenen Zweck verwendet wird. Dies stellt sicher, dass Software vom Softwarehersteller stammt. &&& Schützt Software vor Änderungen nach der Veröffentlichung.
In den Details des Zertifikats sehen die Informationen folgendermaßen aus:

Codesignatur (1.3.6..1.5.5.7.3.3) <<<< Dies ist die erweiterte Schlüsselverwendung OID für die Codesignatur der 1.3.6 ... -Nummer

Diese Informationen wurden sehr zufällig und nicht in einer bestimmten Reihenfolge fließender Dokumentation gefunden, hier:

Generieren von Zertifikaten für die Windows Store-Apps

1B. Wenn Sie also das New-SelfSignedCertifcate-Cmdlet über Powershell verwenden, wird der Befehl als solcher ausgeführt:

New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=YourCompany CA, 0=Your Corporation, C=US" -TextExtension @("2.5.29.19={text}false") -KeyUsage DigitalSignature -KeyLength 2048 -NotAfter (Get-Date).AddMonths(33) -FriendlyName friendlyName2

Der obige Befehl erfüllt beide Kriterien eines Codesignaturzertifikats (obwohl Sie anstelle der Eigenschaft -type auch eine Key Usage Extention oid mit einem entsprechenden Codesignaturtyp verwenden können, z. B. Code signing oid = 1.3.6.1.5.5.7.3. 3) 

Wenn Sie den obigen Befehl in Powershell ausführen, erstellen Sie zwei Dinge, die jetzt exportiert werden können ... 

A.) ein öffentliches Zertifikat B.) Einen privaten Schlüssel + öffentliches Zertifikat in einem PFX-Dateiformat. 

Nun, da wir nun die Möglichkeit haben, die .pfx-Datei zu exportieren, gehen Sie wie folgt vor, um ein Kennwort zu erstellen und die Datei mit dem privaten Schlüssel + certifcate .pfx zu exportieren.Mit dem Befehl würden Sie das Cmdlet in Powershell Export-PfxCertificate ausführen:.

  1. https://docs.Microsoft.com/de-de/powershell/module/pkiclient/export-pfxcertificate?view=win10-ps

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

  1. https://docs.Microsoft.com/en-us/windows/uwp/packaging/packaging-uwp-apps

Szenario 2: Wenn Sie ein vertrauenswürdiges Zertifikat von der Zertifizierungsstelle Ihrer Organisation benötigen 

Hierbei ist zu beachten, dass der Abschnitt oben relevant ist, Sie müssen jedoch die Unterschiede zwischen einem selbst signierten Zertifikat und einer vertrauenswürdigen Stammzertifikatszertifizierungsstelle und einer nachfolgenden Zertifizierungsstelle erkennen.

Nun, hier ist eine Möglichkeit, es zu verstehen. Ein Stammzertifikat zu Beginn war ein selbstsigniertes Zertifikat. Es hat jedoch die Möglichkeit, Zertifikate für verschiedene Dinge auszustellen. d. h. Serverautorisierung oder Codesignatur ... Think Basic Contstraints UNLIMITED. Und es kann auch andere Zertifizierungsstellen ausstellen, die Zertifikate aus verschiedenen Gründen an andere ausstellen können.

Dies wird als Zertifizierungskette bezeichnet. Denken Sie daran, dass das Zertifikat, das wir für unsere Zwecke wünschen, das Ende dieser Kette ist ... Basic Constraints = LIMTED auf 0 oder false, was bedeutet, dass es als End-Endtity oder Certificate Authroity = false in anderen signiert sein muss Sie können also aus diesem Grund keine weiteren Zertifikate ausstellen. 

Da dies für eine Anwendung ist, die einfach installiert und verwendet werden muss. Das macht Sinn. 

Lesen Sie erneut diesen Link: https://blogs.technet.Microsoft.com/pki/2014/03/05/constraints-what-they-are-and-how-theyre-used/

Für das nächste Segment werde ich daher die Schritte erläutern, um ein Zertifikat von Ihrer Zertifizierungsstelle über eine Zertifikatsanforderung anzufordern. In der Linux-Welt über openssl wird dies als .csr bezeichnet. In der Powershell-Welt wird dies als .req bezeichnet 

Wenn Sie die Parameter genau richtig setzen ... ist das Endergebnis eine Datei, die von der Website openssl oder cert mit einer austauschbaren Erweiterung von .req oder .csr gelesen werden kann

Powershell bietet die Möglichkeit, dies über ein Cmdlet namens CertReq zu erstellen. 

 

Sie würden diesen Befehl einfach zusammen mit der Übergabe einer INF-Datei verwenden, die Ihre .req-Zertifikatsanforderung erstellt

die INF-Datei enthält Parameter für Schlüssel- und Zertifikatinformationen, ähnlich wie beim Erstellen eines neuen selbstsignierten Zertifikats aus den obigen Informationen.

  1. [NewRequest] Subject = "C=US,ST=Florida,L=City,O=Your Company Information,OU=City Information,CN=certname.com" Requesttype = PKCS10 Exportable = TRUE HashAlgorithm = md5 KeyAlgorithm = RSA KeyLength = 2048 KeyUsage = CERT_DIGITAL_SIGNATURE_KEY_USAGE FriendlyName = "FriendlyName CERT" [Extensions] 2.5.29.19 = "{text}false" 2.5.29.37 = "{text}1.3.6.1.5.5.7.3.3"  

der Requesttype = PKCS10 erlaubt das Arbeiten mit dem CSs-Decoder openssl ... und alles andere wird über diese Sites erklärt:

-----BEGIN NEW CERTIFICATE REQUEST-----
-----END NEW CERTIFICATE REQUEST-----

Ich hoffe, diese Informationen helfen jemandem, mehr über Zertifikate und deren Verwendung beim Verpacken und Erstellen von Windows Store-Anwendungen zu erfahren.

req / csr decoder

I hope this information helps someone learn about certs and how they are used in the packaging and creation of Windows store applications.

11

Laut dieser Dokumentation: https://docs.Microsoft.com/en-us/windows-hardware/drivers/devtest/makecert .

Der obige Link wird in Ihrem Fall verwendet, um ein Windows-Zertifikat für den Treiber zu erstellen. Wenn Sie das Zertifikat für Ihr UWP-Paket erstellen möchten, können Sie die folgenden Schritte ausführen:

Schritt 1: Ermitteln Sie den Herausgebernamen des Pakets

Schritt 2: Erstellen Sie einen privaten Schlüssel mit MakeCert.exe

Schritt 3: Erstellen Sie mit Pvk2Pfx.exe eine Persönliche Informationsaustauschdatei (.pfx)

Weitere Informationen finden Sie unter So erstellen Sie ein Signaturzertifikat für App-Pakete .

Sie können den folgenden Befehl auch verwenden, um ein Zertifikat direkt zu erstellen. Sie müssen lediglich den Parameter CN durch Ihren Parameter ersetzen.

Pvk machen

"<C:\Program Files (x86)\Windows Kits\10\bin\x64\MakeCert.exe>" /n "CN=Company, O=My Company, C=US" /r /pe /h 0 /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e 01/01/2018 /sv C:\Development\certificates\Company.pvk C:\Development\certificates\Company.cer

Hersteller Cer

"<C:\Program Files (x86)\Windows Kits\10\bin\x64\Pvk2Pfx.exe>" /pvk C:\Development\certificates\Company.pvk /pi pvkPassword /spc C:\Development\certificates\Company.cer /pfx C:\Development\certificates\Company.pfx /po password! /pi password! 
1
Nico Zhu - MSFT