web-dev-qa-db-fra.com

Comment créer un certificat de travail sécurisé ou auto-signé pour une application Windows 10 UWP via Visual Studio 2017 et 2015

Selon cette documentation:

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

La commande suivante décrit la création d’un fichier Windows cer (c’est-à-dire un certificat d’un fournisseur de confiance). 

Le problème, c'est que lors de la construction d'une application dans visual studio 2017, il n'autorise, via le package.windows10.appxmanifest, qu'un fichier pfx. lors de la mise à jour de cette référence de ligne de commande, il ne produit pas de fichier pvk. Il faut donc ajouter 

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

des options de ligne de commande supplémentaires telles que/sv SubjectKeyFile qui produira le fichier pvk résultant. 

Cependant, même en utilisant cette référence de ligne de commande:

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

L’implantation du fichier cert dans Visual Studio produit cette erreur:

Le concepteur de manifeste n'a pas pu importer le certificat. 

Le certificat que vous avez sélectionné n’est pas valide pour la signature car il a expiré ou a un autre problème. Pour plus d'informations, voir http://go.Microsoft.com/fwlink/?LinkID=241478

Je vais au lien et rien n’explique vraiment ce qui se passe. Une personne commente la création d'un temporaire qui fonctionne mais il s'agit d'un certificat de test non spécifique qui ne dure qu'un an. 

Existe-t-il un meilleur moyen de créer le script avec makecert? Comment puis-je savoir si le certificat est finalement construit correctement ou non? Une documentation supplémentaire serait utile mais je n'ai rien trouvé d'autre. 

7
Christian Matthew

La réponse fournie par @nico contient des déclarations correctes, mais m'a permis de réaliser que le problème ne se résumait pas à ce que je décrivais initialement. J'ai donc nettoyé le titre de la question et la question afin de fournir une meilleure question et une réponse ultérieure.

En parcourant le Web, j’ai trouvé bon nombre de ces réponses dans des endroits si variés, c’est-à-dire des questions, des réponses dans des commentaires, sur youtube, etc. J'ai décidé de le placer ici dans un bel endroit neet afin que tout le monde puisse trouver des ressources et apprendre. 

Tout d'abord, il faut se demander à quoi sert l'application. L'application va-t-elle être téléchargée sur le Microsoft Store ou ne doit-elle être utilisée qu'en interne? 

Dans les deux cas, vous souhaiterez déboguer et développer l’application. Le débogage ne nécessite pas l'installation d'un certificat, nous sommes donc en sécurité. 

Si vous utilisez l'application en interne dans votre organisation ou simplement sur votre ordinateur local, vous aurez besoin d'un certificat approuvé. 

Ce certificat peut exister dans plusieurs scénarios. 

  1. Avez-vous besoin d'un certificat auto-signé ou
  2. Avez-vous besoin d’un certificat délivré par une autorité de certification d’autorité de certification, c’est-à-dire votre entreprise? 

Je vais passer en revue les deux scénarios. Dans les deux cas, le protocole makecert est déprécié notes de dépréciation de makecert

Scénario 1: Si vous avez besoin d'un certificat auto-signé, procédez comme suit

  1. Accédez à powershell et utilisez l'applet de commande New-SelfSignedCertificate pkiclient ... elle vous fournira la création d'un .cer et d'une combinaison clé privée + certificat public = = .pfx si vous créez pour la clé privée + cert ... Et vous devez disposer d’une clé privée, c’est-à-dire .pfx, pour regrouper et conditionner votre application avec Visual Studio et l’installer dans le magasin d’applications Windows local (à ne pas confondre avec le magasin Microsoft).

Voici les liens à suivre *** Assurez-vous de lire 1A avant de créer votre certificat:

Créer une signature de package de certificat
New-SelfSignedCertificate

1A. *** Lorsque vous créez le New-SelfSignedCertificate, vous devez comprendre que le certificat doit être créé de manière très spécifique. Il s’agit d’un certificat auto-signé ou émis par une autorité de certification.

Plus précisément, le certificat doit posséder 2 propriétés 

une). Une extension de base Contraintes doit être définie sur Type d'objet = Entité finale. Voici ce que cela dit en termes simples, c'est ceci ... Lorsque ce certificat vous est délivré, vous ne pouvez pas demander au certificat de devenir une autorité de certification ultérieure, avec la possibilité de délivrer plus de certificats. En d'autres termes ... Ceci est un certificat de fin de ligne. 

Pour en savoir plus sur les contraintes, cliquez ici. )} _

b) La valeur de l'extension Enahnced Key Usage (EKU) est définie sur Code Signing. Cela empêche le certificat d’être utilisé à des fins autres que celles pour lesquelles il a été conçu. Cela garantit que le logiciel provient de l’éditeur de logiciel &&& Protège le logiciel de toute altération après sa publication.
Dans les détails du certificat, l’information ressemblera à ceci:

Signature du code (1.3.6..1.5.5.7.3.3) <<<< Il s'agit de l'utilisation améliorée de la clé OID pour le code servant à la signature du numéro 1.3.6 ...

Cette information a été trouvée, très au hasard et non dans un ordre particulier de documentation, ici:

Génération de certificats pour les applications du Windows Store

1B. Donc, en dernière instance, pour utiliser l'applet de commande New-SelfSignedCertifcate via Powershell, vous pouvez exécuter une commande en tant que telle:

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

La commande ci-dessus répond aux deux critères d'un certificat de signature de code (bien que vous ayez au lieu d'utiliser la propriété -type, vous auriez pu choisir un oid Key Usage Extention avec un type de signature de code correspondant, par exemple, Code Signing oid = 1.3.6.1.5.5.7.3. 3) 

Si vous exécutez la commande ci-dessus dans Powershell, vous créerez 2 éléments qui peuvent maintenant être exportés ... 

A.) un certificat public B.) Une clé privée + un certificat public contenu dans un format de fichier .pfx. 

Maintenant que nous avons la possibilité d’exporter le fichier .pfx, voici comment procéder pour créer un mot de passe et exporter la clé privée + le fichier certifcate .pfx.À l'aide de la commande, vous pouvez exécuter la cmdlet dans powershell Export-PfxCertificate:.

  1. _ { https://docs.Microsoft.com/en-us/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 } _ 

Scénario 2: Si vous avez besoin d'un certificat approuvé par l'autorité de certification de votre organisation 

Ce que vous devez garder à l'esprit, c'est que la section ci-dessus est pertinente, mais vous devrez comprendre les différences entre un certificat auto-signé et une autorité de certification de certificat racine de confiance et/ou ultérieure.

Eh bien voici une façon de le comprendre. Un certificat racine à ses débuts était un certificat auto-signé. Cependant, il a la capacité d'émettre des certificats à d'autres pour diverses choses. Autrement dit, autorisation du serveur ou signature de code ... Pensez aux contraintes de base illimitées. Et il peut également émettre d'autres autorités de certification capables de délivrer des certificats à d'autres pour de nombreuses raisons.

Ceci est appelé la chaîne de cert. Rappelez-vous d’en haut, le certificat que nous voulons pour nos besoins est la fin de cette chaîne ... Contraintes de base = LIMTED à 0 ou false, ce qui signifie qu’elle doit être signée en tant que End-endtity ou Certificate Authroity = false ... en autre mots que vous ne pouvez pas émettre d'autres certificats pour quelque raison que ce soit à partir de ce certificat qui a été émis. 

Puisque c'est pour une application qui doit simplement être installée et utilisée. C'est logique. 

Encore une fois, lisez ce lien: https://blogs.technet.Microsoft.com/pki/2014/03/05/constraints-what-the-the-are-and-how-theyre-used/

Donc, pour ce segment suivant, je vais expliquer les étapes à suivre pour demander un certificat à votre autorité de certification via une demande de certificat. Dans le monde linux via openssl, on parle de .csr ... Dans le monde PowerShell, on parle de .req 

Quand vous mettez les paramètres exactement comme il faut ... le résultat final est un fichier qui peut être lu par le site Web openssl ou cert de vérification avec une extension interchangeable de .req ou .csr

Powershell a la possibilité de créer cela via une applet de commande appelée CertReq 

 

Vous utiliseriez simplement cette commande en passant un fichier .inf qui créerait votre demande de certificat .req

le fichier .inf contiendrait des paramètres pour une clé et des informations de certificat, comme lors de la création d'un nouveau certificat auto-signé à partir des informations ci-dessus.

  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"  

le Requesttype = PKCS10 permet que cela fonctionne avec le décodeur openssl csr ... et tout le reste est expliqué via ces sites:

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

J'espère que ces informations permettront à quelqu'un de mieux connaître les certificats et leur utilisation dans le packaging et la création d'applications Windows Store.

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
Christian Matthew

Selon cette documentation: https://docs.Microsoft.com/en-us/windows-hardware/drivers/devtest/makecert .

Le lien ci-dessus dans votre cas sert à créer un certificat Windows pour le pilote. Si vous souhaitez créer le certificat pour votre package UWP, vous pouvez vous référer aux étapes suivantes:

Étape 1: Déterminez le nom de l'éditeur du package.

Étape 2: Créer une clé privée à l'aide de MakeCert.exe

Étape 3: Créer un fichier d'échange d'informations personnelles (.pfx) à l'aide de Pvk2Pfx.exe

Pour plus de détails, veuillez vous référer à Comment créer un certificat de signature de paquet d'application .

Et vous pouvez également utiliser la commande ci-dessous pour créer directement un certificat. Il vous suffit de remplacer le paramètre CN par votre paramètre.

Make Pvk

"<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

Make 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