Как решить System.Security.Cryptography.CryptographicException: указан неверный тип поставщика

Я разработал доступ к электронной таблице Google из моего приложения. Она работает отлично в течение нескольких дней, но теперь я получил исключение, так как

"System.Security.Cryptography.CryptographicException: указан неверный тип поставщика."

Я не могу понять, в чем проблема? Мой код работает нормально на моей локальной машине, но на сервере "получить исключение".

Вот трассировка стека:

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 Google.Apis.Auth.OAuth2.ServiceAccountCredential.Initializer.FromCertificate(X509Certificate2 certificate)

Я искал, но не нашел точного решения. Думаю, с моим кодом проблем нет.

Вот мой код:

            string applicationName = "#########";  

            var serviceaccountemail = "********************************";

            var certificate = new X509Certificate2(GetCertificateBytes(), "notasecret", X509KeyStorageFlags.Exportable);

            ServiceAccountCredential credential = new ServiceAccountCredential(
              new ServiceAccountCredential.Initializer(serviceaccountemail)
              {
                  Scopes = new[] { "https://spreadsheets.google.com/feeds" }
              }.FromCertificate(certificate));

            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = applicationName,
            });

            String spreadsheetId = "*************************";

            String range = "Sheet1!A1:C";

            SpreadsheetsResource.ValuesResource.GetRequest request = 
                service.Spreadsheets.Values.Get(spreadsheetId, range);

            ValueRange response = request.Execute();



 public byte[] GetCertificateBytes()
        {
            return secure.SecureResource.qa_automation_google_key;
        }

Вот обновление:
Когда я отлаживаю приведенный выше код, я увидел исключение как '((System.Security.Cryptography.RSACryptoServiceProvider)certificate.PrivateKey).CspKeyContainerInfo.CryptoKeySecurity' threw an exception of type 'System.Security.AccessControl.PrivilegeNotHeldException'на сертификат X509 сертификат2. Итак, я подумал, что из-за этого исключения у меня указан неверный тип провайдера.

Вот информация о моем сертификате:
1. Файл.p12
2. Тип провайдера 1
3. используя алгоритм ша1рса.
4. версия моего сертификата v1.

Если вы хотите любую другую информацию, пожалуйста, прокомментируйте, я предоставлю. Заранее спасибо.

0 ответов

Вы можете попробовать создать сертификат X509 с помощью приведенного ниже кода.

x509Certificate = новый X509Certificate2(rawData, пароль, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

Это работает для меня после расследования почти 2 дня.

Другие вопросы по тегам