Закрытый ключ C# X509Certificate2 исчезает при возникновении GCC#

Место общения программистов C#
Ответить
Anonymous
 Закрытый ключ C# X509Certificate2 исчезает при возникновении GC

Сообщение Anonymous »

У меня возникла очень странная проблема с сертификатом шифрования. Я устанавливаю файл .p12 с 1 сертификатом шифрования в StoreName.MY, кажется, все работает нормально, я открываю диспетчер сертификатов, вижу установленный сертификат и могу экспортировать его с помощью закрытого ключа. Однако через некоторое время закрытый ключ исчезнет, ​​и я больше не смогу экспортировать сертификат с закрытым ключом.
Код, используемый для установки сертификата, действительно прост и понятен:

Код: Выделить всё

using (X509Store store = new X509Store(StoreName.My))
{
var collection = new X509Certificate2Collection();
// the p12 only have 1 cert (encryption) inside
byte[] data = Convert.FromBase64String(some.P12);
collection.Import(data, password,
X509KeyStorageFlags.Exportable |
X509KeyStorageFlags.PersistKeySet |
X509KeyStorageFlags.UserKeySet);

store.Open(OpenFlags.ReadWrite);
collection.ToList().ForEach((cert) => store.Add(cert));
store.Close();

foreach(X509Certificate2 cert in collection)
{
cert.Reset();
cert.Dispose();
}
}
Я даже предпринял дополнительные шаги, чтобы собрать и сбросить + удалить каждый установленный сертификат. Однако через некоторое неопределенное время произойдет сбор мусора, и закрытый ключ, а также все другие ранее установленные закрытые ключи сертификата шифрования ВСЕ исчезнут... Не имеет значения, были ли эти сертификаты шифрования установлены сегодня, через несколько дней. назад или несколько недель все они исчезли бы.
Я просматривал Интернет в течение последнего дня и не смог найти ничего, что могло бы указать мне правильное направление. , как вы могли видеть из приведенного выше фрагмента кода, я даже предпринял дополнительный шаг, чтобы закрыть все X509Store и Dispose всех объектов X509Certificate2.
Флаги (

Код: Выделить всё

PersistKeySet
), используемый для импорта, также был выбран специально для решения проблемы. Кто-нибудь сталкивался с таким поведением? Это вызвано сборщиком мусора?
Окружающая среда:
  • Windows 11, Windows 10, Windows 7
  • C#, .NET Core3.1 и .NET Framework 4.7


Подробнее здесь: https://stackoverflow.com/questions/781 ... -gc-occurs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»