J'essaie de créer une application clic unique à l'aide de la fonctionnalité d'intégration et de déploiement continus dans VSTS (services d'équipe Visual studio en ligne) Nous essayons de créer cela à l'aide de l'agent hébergé Visual studio 2015 Nous avons eu des difficultés à signer le fichier de clé de nom fort avec un erreur de

MSB3326: Cannot import the following key file: xxxx.snk. The key file may be password protected. To correct this, try to import the certificate again or import the certificate manually into the current user's personal certificate store. Et après ça

MSB3321: Importing key file "xxxx.pfx" was canceled.

J'ai essayé de sélectionner à la fois dans le magasin et dans le fichier, j'ai changé l'emplacement et je me suis assuré de m'engager, mais sans succès. Toutes les idées comment je peux surmonter ces erreurs ou ce que je fais mal.

Clerification sur la réponse sélectionnée

Je voulais juste faire une clarification si quelqu'un d'autre a le même problème, en plus de la réponse, je devais placer mon certificat dans mon code de contrôle source et le valider. Ensuite, pour sélectionner son emplacement, ajoutez une variable globale sur la version VSTS

enter image description here

$cert.Import("$(CertPath)", $password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet") Où $ (CertPath) serait quelque chose comme $(Build.SourcesDirectory)\SharedSolutionFiles\CertificateName.pfx

7
Harry 21 avril 2017 à 19:02

3 réponses

Meilleure réponse

Vous pouvez créer un script PowerShell et ajouter une action de script PowerShell dans votre définition de build pour importer le fichier de certificat avant l'étape VSBuild.

Échec de la construction sans le certificat d'importation PowerShell Étape: entrez la description de l'image ici

Génération passée avec l'étape du certificat d'importation PowerShell: entrez la description de l'image ici

Le script PowerShell que j'ai utilisé:

$pfxpath = 'pathtoees.pfx'
$password = 'password'

Add-Type -AssemblyName System.Security
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($pfxpath, $password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet")
$store = new-object system.security.cryptography.X509Certificates.X509Store -argumentlist "MY", CurrentUser
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]"ReadWrite")
$store.Add($cert)
$store.Close()
13
Eddie Chen - MSFT 26 avril 2017 à 02:00

Au lieu d'utiliser une construction sur site ou de charger les certificats sur les magasins de certificats sur l'agent de construction (ce qui pourrait être considéré comme non sécurisé), il est possible de remplacer la tâche de construction FileSign et d'en construire une qui utilise un fichier de certificat et un mot de passe.

J'ai décrit les étapes ici: https://stackoverflow.com/a/55313239/2068626

0
Peter 23 mars 2019 à 11:31

La meilleure façon est que vous pouvez configurer une build sur site agent et importez le certificat dans le magasin de certificats, puis remplacez le compte de service de l'agent de build par le même compte.

1
starian chen-MSFT 24 avril 2017 à 04:28