Install certificates in to the Windows Local user certificate store in C#

I'm writing a windows service that needs several certificates in the certificate store in order to connect to a third party web service.

On my installer I call a small application (C#) that creates a user to run the service as.

Works fine.

I now need to install about 10 certificates (don't ask!) into the users certificate store but can't find any succincet programatic way to do so.

Any hints? Or am I going to have to use com interop...

Answers


Turns out you first need to impersonate the user.

Using this very nice lib (http://www.codeproject.com/KB/cs/zetaimpersonator.aspx) you can do the following:

using (new Impersonator("username", "", "password"))
{
	try
	{
		X509Store serviceRuntimeUserCertificateStore = new X509Store(StoreName.My);
		string baseDir = AppDomain.CurrentDomain.BaseDirectory;
		string certPath = Path.Combine(baseDir, certificateFolder);

		string certificateFile = "c:\\file.cert";
		string certificatePassword = "somePassword";			
		string certificateLocation = certPath + "\\" + certificateFile;

		InstallCertificate(certificateLocation, certificatePassword);
	}
	catch (Exception ex)
	{
		Console.WriteLine(ex);
	}
}

private static void InstallCertificate(string certificatePath, string certificatePassword)
{
	try
	{
	    var serviceRuntimeUserCertificateStore = new X509Store(StoreName.My);
        serviceRuntimeUserCertificateStore.Open(OpenFlags.ReadWrite);

		X509Certificate2 cert;

		try
		{
			cert = new X509Certificate2(certificatePath, certificatePassword);
		}
		catch(Exception ex)
		{
			Console.WriteLine("Failed to load certificate " + certificatePath);
			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 certificate index entry and verify the certificate file exists.", certificatePath);
	}
}

Please add your own exception handling. If you're adding multiple certificates keep the X509Store open for the duration for efficency.


Need Your Help

SQL server simple query

sql sql-server sql-server-2005 tsql

How to select value from a table if it value is not null,and select a default value if not?.I.E:

batch file >NUL >> %dir% error

file batch-file redirect

I made this batch file it works fine exceptfor submenu 4 where it redirects ping 192.168.1.1 -n 1 -w !thyme! to NUL instead of echo ping 192.168.1.1 -n 1 -w !thyme!>NUL to %dir101%

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.