Installez les certificates dans le magasin de certificates d’utilisateurs Windows Local en C #

J’écris un service Windows qui nécessite plusieurs certificates dans le magasin de certificates afin de se connecter à un service Web tiers.

Sur mon installateur, j’appelle une petite application (C #) qui crée un utilisateur pour exécuter le service.

Ça fonctionne bien.

Je dois maintenant installer environ 10 certificates (ne le demandez pas!) Dans le magasin de certificates des utilisateurs, mais je ne trouve aucun moyen de programmation succinct pour le faire.

Des indices? Ou vais-je devoir utiliser COM interop …

Il s’avère que vous devez d’abord emprunter l’identité de l’utilisateur.

En utilisant la très belle bibliothèque décrite dans Une petite classe C # pour usurper l’identité d’un utilisateur , vous pouvez effectuer les opérations suivantes:

using (new Impersonator("username", "", "password")) { try { X509Store serviceRuntimeUserCertificateStore = new X509Store(StoreName.My); ssortingng baseDir = AppDomain.CurrentDomain.BaseDirectory; ssortingng certPath = Path.Combine(baseDir, certificateeFolder); ssortingng certificateeFile = "c:\\file.cert"; ssortingng certificateePassword = "somePassword"; ssortingng certificateeLocation = certPath + "\\" + certificateeFile; InstallCertificate(certificateeLocation, certificateePassword); } catch (Exception ex) { Console.WriteLine(ex); } } private static void InstallCertificate(ssortingng certificateePath, ssortingng certificateePassword) { try { var serviceRuntimeUserCertificateStore = new X509Store(StoreName.My); serviceRuntimeUserCertificateStore.Open(OpenFlags.ReadWrite); X509Certificate2 cert; try { cert = new X509Certificate2(certificateePath, certificateePassword); } catch(Exception ex) { Console.WriteLine("Failed to load certificatee " + certificateePath); throw new DataException("Certificate appeared to load successfully but also seems to be null.", ex); } serviceRuntimeUserCertificateStore.Add(cert); serviceRuntimeUserCertificateStore.Close(); } catch(Exception) { Console.WriteLine("Failed to install {0}. Check the certificatee index entry and verify the certificatee file exists.", certificateePath); } } 

S’il vous plaît append votre propre gestion des exceptions. Si vous ajoutez plusieurs certificates, gardez le X509Store ouvert pour des raisons d’efficacité.