Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

C# ile Sertifika Yükleme

Merhabalar,
İş yerinde bir sertifika geçişimiz oldu ve bunu kod ile cihazlara yüklememiz gerekti. Hemen ufak bir uygulama yazdım ve işe yarayabileceğini düşünerek paylaşıyorum. AddCert() metodundaki parametreleri değiştirerek sertifikayı istediğimiz yere yükleyebiliriz. Aşağıdaki kod örneğimde Personal altına yükleme yapıyoruz.  Run->mmc yazarak PC’nizde yüklü olan sertifikaları inceleyebilirsiniz.

Capture


class Program
{
static void Main(string[] args)
{
Console.WriteLine("Loading has started......");
var cert = new X509Certificate2("CertificateName.pfx", "password", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
AddCert(StoreName.My, StoreLocation.LocalMachine, cert);
AddAccessToCertificate(cert, "IIS_IUSRS");
Console.WriteLine("Loading has finished......");
}
private static void AddCert(StoreName storeName, StoreLocation storeLocation, X509Certificate2 cert)
{
X509Store store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();
}

private static void AddAccessToCertificate(X509Certificate2 cert, string user)
{
RSACryptoServiceProvider rsa = cert.PrivateKey as RSACryptoServiceProvider;

if (rsa != null)
{
string keyfilepath =
FindKeyLocation(rsa.CspKeyContainerInfo.UniqueKeyContainerName);

FileInfo file = new FileInfo(keyfilepath + "\\" +
rsa.CspKeyContainerInfo.UniqueKeyContainerName);

FileSecurity fs = file.GetAccessControl();

NTAccount account = new NTAccount(user);
fs.AddAccessRule(new FileSystemAccessRule(account,
FileSystemRights.FullControl, AccessControlType.Allow));

file.SetAccessControl(fs);
}
}
private static string FindKeyLocation(string keyFileName)
{
string text1 =
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string text2 = text1 + @"\Microsoft\Crypto\RSA\MachineKeys";
string[] textArray1 = Directory.GetFiles(text2, keyFileName);
if (textArray1.Length > 0)
{
return text2;
}
string text3 =
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string text4 = text3 + @"\Microsoft\Crypto\RSA\";
textArray1 = Directory.GetDirectories(text4);
if (textArray1.Length > 0)
{
foreach (string text5 in textArray1)
{
textArray1 = Directory.GetFiles(text5, keyFileName);
if (textArray1.Length != 0)
{
return text5;
}
}
}
return "Private key exists but is not accessible";
}
}

December 23, 2015 - Posted by | C# | , , , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s