Я пытаюсь расшифровать некоторые данные с помощью закрытого ключа сертификата. Все работает нормально, когда сертификат установлен на локальном компьютере (я использую самоподписанный сертификат для тестирования, и у меня есть закрытый ключ для сертификата), но когда я пытаюсь получить доступ к закрытому ключу с удаленной машины с использованием того же кода , Я получаю исключение «Ключ не существует».«System.Security.Cryptography.CryptographicException: Keyset не существует» при чтении закрытого ключа с удаленной машины
Я использую консольное приложение для тестирования, и я удостоверился, что мой идентификатор имеет права доступа на закрытый ключ на удаленном сервере. Вот пример кода, я использую:
var store = new X509Store(@"\\server1\My", StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var result = store.Certificates.Find(X509FindType.FindBySubjectName, "server1.test.com", false);
var certificate = result[0];
store.Close();
//This succeeds from both local and remote server
var rsaPublic = (RSACryptoServiceProvider)certificate.PublicKey.Key;
//This succeeds from local, but fails from remote server
var rsaPrivate = (RSACryptoServiceProvider)certificate.PrivateKey;
Здесь стек вызовов исключение
Unhandled Exception: System.Security.Cryptography.CryptographicException: Keyset does not exist
at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
at System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
at RsaPoc.Program.Main(String[] args)
Я нашел similar без ответа вопрос о SO, но с использованием не-управляемый код, в то время как I Я использую управляемый API, но оба они имеют одну и ту же причину.