2013-06-26 2 views
0

У меня есть следующий код, в котором SIGNED_FILENAME является константой, указывающей на существующий файл pfx, содержащий закрытый ключ.Установка разрешений для закрытого ключа для сертификата с использованием кода

X509Certificate2 cert = new X509Certificate2(SIGNED_FILENAME, PASSWORD, X509KeyStorageFlags.MachineKeySet); 
RSACryptoServiceProvider certRsa = cert.PrivateKey as RSACryptoServiceProvider; 

Когда я использую код для добавления разрешений к закрытому ключу я считаю, что они установлены на файл, указанный в certRsa.CspKeyContainerInfo.UniqueKeyContainerName. Когда я просматриваю разрешения сертификатов в оснастке mmts для сертификатов, однако новых разрешений не задано.

Когда я устанавливаю ключи вручную с помощью оснастки «Сертификаты mmc», я нахожу, что закрытый ключ, на который он устанавливает разрешения, отличается от того, который я нашел в свойстве UniqueContainerName, упомянутом выше.

TLDR: каждый раз, когда я запускаю эти две строки кода, файл контейнера ключа изменяется.

Зачем это происходит и как я могу установить разрешения на тот же ключ, что и оснастка certts mmc?

ответ

0

Видимо потому, что я открывал его из файла каждый раз, когда контейнер ключей был сгенерирован (или что-то еще). Вот код, который работает:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 
X509Certificate2 c = store.Certificates 
    .Find(X509FindType.FindBySubjectName, SIGNED_SUBJECT, true) 
    .Cast<X509Certificate2>() 
    .FirstOrDefault(); 
    store.Close(); 

RSACryptoServiceProvider rsa = c.PrivateKey as RSACryptoServiceProvider; 
Console.WriteLine("Certificate thumbprint:" + c.Thumbprint); 
Console.WriteLine("From machine key store?: " + rsa.CspKeyContainerInfo.MachineKeyStore); 
Console.WriteLine("Key container name: " + rsa.CspKeyContainerInfo.KeyContainerName); 
Console.WriteLine("Key unique container name: " + rsa.CspKeyContainerInfo.UniqueKeyContainerName); 

Ранее при выполнении фрагмента кода из моего оригинального поста (где я открываю сертификат в виде файла) ключ информации, которая выводит на консоль будет меняться каждый раз. Запуск измененного кода показывает одну и ту же информацию каждый раз.

Смежные вопросы