Вопрос при запуске следующего кода:
X509Certificate2 cert = new X509Certificate2(@"C:\file.p12", "password", X509KeyStorageFlags.Exportable);
RSACryptoServiceProvider crypt = (RSACryptoServiceProvider)cert.PrivateKey;
Я получаю следующую ошибку: Keyset does not exist
.
Я не добавил сертификат в хранилище, требуется ли это для доступа к закрытому ключу?
Добавьте параметр X509KeyStorageFlags.PersistKeySet к последнему аргументу конструктора X509Certificate2. В противном случае, когда он загружает файл p12, он не будет загружать закрытый ключ. В частности:
X509Certificate2 cert = new X509Certificate2(@"C:\file.p12", "password",
X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
RSACryptoServiceProvider crypt = (RSACryptoServiceProvider)cert.PrivateKey;
Если это не удается, это может быть проблема с правами на файл, где хранится ключ. См. X509Certificate - Keyset не существует для объяснения и примера.