Вопрос по .net, c# – Расположение контейнера для открытых и закрытых ключей в Windows?

10

Я пытаюсь сохранить свои открытые и закрытые ключи в контейнере, используя следующий код:

CspParameters cp = new CspParameters();
cp.KeyContainerName = "Test";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);

То, что я хотел бы знать, - это местоположение контейнера. Расположение контейнера в файловой системе?

нет, я не получаю новый файл в моем каталоге exe. Thabo
Скорее всего, в каталоге вашего .exe om471987

Ваш Ответ

2   ответа
21

Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), 
    @"Microsoft\Crypto\RSA\MachineKeys")

Вы можете получить имя файла для данного ключа следующим образом:

CspParameters cp = ...;
CspKeyContainerInfo info = new CspKeyContainerInfo(cp);
string fileName = info.UniqueKeyContainerName;

Я не верю, что эта информация задокументирована, поэтому, если вы ее используете, вы будете полагаться на недокументированные детали реализации, которые могут не работать в будущих версиях Windows. К сожалению, иногда необходимо использовать его; напримеркак отмечено в этом вопросеЯ не думаю, что существует какой-либо другой надежный способ просмотра разрешений для контейнера ключей RSA с непривилегированной учетной записи.

(*) это для машинных ключей. Пользовательские ключи, вероятно, находятся подEnvironment.SpecialFolder.LocalApplicationData

Для меня этот путь разрешенC:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
Спасибо. Вы правы. Я не смог найти документированную информацию на MSDN. В будущем она может устареть. Thabo
Пользовательские ключи находятся в каталоге в Environment.SpecialFolder.ApplicationData
2

Монитор процесса а такжеSn.exe (инструмент строгого имени) чтобы узнать местоположение папки на моем компьютере с Windows 7, которая содержит мои ключевые файлы, и тем самым подтвердить информацию вОтвет Джо.

Сначала я запустил Process Monitor и указал следующий фильтр:

Column    Relation    Value    Action
---------------------------------------
Path      contains    crypto   Include

Затем я запустил инструмент для создания строгого имени (sn.exe)† извлечь открытый ключ из пары ключей в моем контейнереVS_KEY_773685D47C32F8C7 и экспортировать его вpublic_key.snk:

sn.exe -pc VS_KEY_773685D47C32F8C7 public_key.snk

После этого я отметил, что Process Monitor указал, чтоsn.exe сделал несколько запросов доступа к папке:

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

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

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\74c2c10a37baa69f7969c7144db5805d_c55067c2-4a01-4792-9d70-d7a6e4799447

sn.exe можно удобно запустить черезКомандная строка разработчика для Visual Studio.

Похожие вопросы