Меню

System security cryptography cryptographicexception ошибка исполнения функции


Offline

wolfree9266

 


#1
Оставлено
:

28 июня 2017 г. 18:00:32(UTC)

wolfree9266

Статус: Участник

Группы: Участники

Зарегистрирован: 11.12.2016(UTC)
Сообщений: 17
Российская Федерация
Откуда: Раменское

Сказал(а) «Спасибо»: 1 раз

Добрый вечер.
Пытаюсь подписать pdf по кнопке, ранее работало, сегодня на флешке создал новый контейнер и сертификат. С флешки установил сертификат в личное, пытаюсь с него подписаться, выводит сообщение о том что срок лицензии CSP истёк, нажимаю ОК, получаю ошибку — «Ошибка исполнения функции.»

Интересна причина возникновения ошибки

код

Код:


/*
    using System;
    using System.Collections.Generic;
    using System.IO;
    using iTextSharp.text.pdf;
    using Org.BouncyCastle.X509;
    using System.Security.Cryptography.Pkcs;
    using System.Security.Cryptography.X509Certificates;

    using iTextSharp.text;
*/
 public X509Certificate2 ВыборСертификата()
        {
            // Находим секретный ключ по сертификату в хранилище MY
            X509Store store = new X509Store("My", StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);


            X509Certificate2Collection coll = X509Certificate2UI.SelectFromCollection
                (store.Certificates, "Выберите сертификат", "Выберите сертификат", X509SelectionFlag.SingleSelection);



            if (coll.Count == 0 || coll == null)
            {
                Console.WriteLine ("Ключ не найден.");
                return null;
            }

            X509Certificate2 certificate = coll[0];

            if (certificate == null /*|| certificate.Verify()*/)
            {
                Console.WriteLine("Ключ не найден.");
                return null;
            }
            if (!ValidateCertificate(certificate))
            {

                return null;
            }

            //  SignedCms SignedCms = new SignedCms();
            //  CmsSigner cmsSigner = new CmsSigner(certificate);
            // SignedCms.ComputeSignature(cmsSigner, true);
            // то что подписываем
            byte[] buff = new byte[8192];
            var contentInfo = new ContentInfo(buff);

            // сертификат для подписания
            SignedCms signedCms = new SignedCms(contentInfo, true);
            try
            {
                // Вычисляем подпись
                // byte[] pk = SignMsg(ss.ToArray(), cert, true);
                var cmsSigner = new CmsSigner(certificate);
                signedCms.ComputeSignature(cmsSigner, false);
            }
            catch (System.Security.Cryptography.CryptographicException ex)
            {
                Console.WriteLine(ex.Message);
            }
            return certificate;
        }
 /// <summary>
        /// Проверка валидности сертификата
        /// </summary>
        private bool ValidateCertificate(X509Certificate2 x509)
        {
            bool valid = false;
            DateTime timeSert = DateTime.Parse(x509.GetExpirationDateString());

            if (DateTime.Now.CompareTo(timeSert) < 0)
            {
                // Console.WriteLine("Сертификат валиден. Текущая дата: " + DateTime.Now.ToString() + " Дата сертификата: " + timeSert.ToString());
                valid = true;
            }
            else
            {
                Console.WriteLine("Сертификат не валиден. Текущая дата: " + DateTime.Now.ToString() + " Дата сертификата: " + timeSert.ToString());
            }

            return valid;
        }


Вверх


Offline

Андрей Писарев

 


#2
Оставлено
:

28 июня 2017 г. 18:09:53(UTC)

Андрей *

Статус: Сотрудник

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,736
Мужчина
Российская Федерация

Сказал «Спасибо»: 451 раз
Поблагодарили: 1838 раз в 1421 постах

Автор: wolfree9266 Перейти к цитате

Добрый вечер.
Пытаюсь подписать pdf по кнопке, ранее работало, сегодня на флешке создал новый контейнер и сертификат. С флешки установил сертификат в личное, пытаюсь с него подписаться, выводит сообщение о том что срок лицензии CSP истёк, нажимаю ОК, получаю ошибку — «Ошибка исполнения функции.»

Интересна причина возникновения ошибки

В вопросе есть ответ.
Для работы с CSP необходима действующая лицензия.

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Ошибка 0х8007065B или «Ошибка исполнения функции» может возникать при работе с сертификатом на торговых площадках или информационных системах из-за отсутствия лицензии на программу Крипто Про CSP.

Ошибка 0x8007065B

  1. Если Ваш сертификат без встроенной лицензии:

Убедитесь, что лицензия на КриптоПро CSP введена и действует.

Для этого найдите «КриптоПро CSP» в программах в меню «Пуск». Во вкладке «Общие» будет указан «Срок действия».

КриптоПро истекла лицензия

Если лицензия «Истекла» и у Вас есть бланк с актуальной лицензией, введите серийный номер из бланка нажав на кнопку «Ввод лицензии». Подробнее — Как ввести лицензию КриптоПро CSP.

Если лицензии на КриптоПро CSP у Вас нет, Вы можете приобрести её у нас. Для этого позвоните по бесплатному номеру 8 (800) 550-87-19 доб. 2500.

2. Если ваш сертификат со встроенной лицензией:

Убедитесь, что используется КриптоПро не ниже версии 4.0 и сертификат электронной подписи установлен.

В сертификате есть встроенная лицензия, если в открытом ключе сертификата на вкладке «Состав» присутствует поле «Ограниченная лицензия Крипто-Про».

КриптоПро встроенная лицензия



Остались вопросы? Как мы можем помочь?

Как мы можем помочь?

Невозможно создание объекта сервером программирования объектовОтсутствуют разрешения на использование ActiveX объектов

Getting «CryptographicException: Error occurred during a cryptographic operation.» on macOS Mojave.

The project runs successfully under docker but not locally on mac.

.NET Core SDK (reflecting any global.json):
 Version:   2.1.500
 Commit:    b68b931422

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  10.14
 OS Platform: Darwin
 RID:         osx.10.14-x64
 Base Path:   /usr/local/share/dotnet/sdk/2.1.500/

Host (useful for support):
  Version: 2.1.6
  Commit:  3f4f8eebd8

.NET Core SDKs installed:
  1.0.0-preview1-002702 [/usr/local/share/dotnet/sdk]
  2.0.2 [/usr/local/share/dotnet/sdk]
  2.1.300-rc1-008673 [/usr/local/share/dotnet/sdk]
  2.1.300 [/usr/local/share/dotnet/sdk]
  2.1.302 [/usr/local/share/dotnet/sdk]
  2.1.500 [/usr/local/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.0-rc1-final [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.6 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.0-rc1-final [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.6 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 1.0.0-rc2-3002702 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.0-rc1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.2 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.6 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download
  • Remove From My Forums
  • Question

  • Hi,

    I’m running into an issue with new .net framework(4.6.1) security update KB3136000, the previously working application now throws exception in signedXml.ComputeSignature();

    System.Security.Cryptography.CryptographicException: Unable to resolve Uri
    cid:partdd1df1014f924e76ad48893e0cf70fd7.

       at System.Security.Cryptography.Xml.Reference.CalculateHashValue(XmlDocument document, CanonicalXmlNodeList refList)

       at System.Security.Cryptography.Xml.Reference.UpdateHashValue(XmlDocument document, CanonicalXmlNodeList refList)

       at System.Security.Cryptography.Xml.SignedXml.BuildDigestedReferences()

       at System.Security.Cryptography.Xml.SignedXml.ComputeSignature()

    Any advise please.

    Thanks,

    Todd

    • Edited by

      Friday, March 11, 2016 5:55 AM

Answers

    • Edited by
      Susan BradleyMVP
      Friday, March 11, 2016 6:56 PM
    • Marked as answer by
      Todd Liang
      Tuesday, March 15, 2016 4:50 AM

Когда я делаю сертификат x509 для шифрования и дешифрования сообщения, я получил некоторую информацию об ошибке и не смог решить эту проблему. Может ли кто-нибудь когда-нибудь решить эту ошибку? Спасибо.

Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений об ошибке и ее происхождении в коде.

Детали исключения:

System.Security.Cryptography.CryptographicException: набор ключей не существует。

Ошибка источника:

Строка 53: использование (RSACryptoServiceProvider rsaProviderDecrypt = (RSACryptoServiceProvider) cerDecrypt.PublicKey.Key) Строка 54: {Строка 55: plainHashBytes = rsaProviderDecrypt.Decrypt (encryptedHashBytes, false); Строка 56: rsaProviderDecrypt.Clear (); Строка 57: rsaProviderDecrypt.Dispose ();

Исходный файл: E: PayUSite PayMvcApp Controllers HashMessageController.cs Строка: 55

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

[CryptographicException: набор ключей не существует. ] System.Security.Cryptography.CryptographicException.ThrowCryptographicException (Int32 ч) +41 System.Security.Cryptography.RSACryptoServiceProvider.DecryptKey (SafeKeyHandle pKeyContext, Byte [] pbEncryptedKey, Int32 cbEncryptedKey, Boolean fOAEP, ObjectHandleOnStack ohRetDecryptedKey) System.Security.Cryptography.RSACryptoServiceProvider.Decrypt (Byte [] rgb, Boolean fOAEP) +579.

исходный код:


  • возможный дубликат CryptographicException «Набор ключей не существует», но только через WCF
  • 1 Я видел это раньше. Найдите «Набор ключей не существует» в разделе «Криптографическая совместимость: цифровые подписи». я считать есть пара открытых ручек. При сборке мусора общий ресурс очищается несколько раз (что не работает). Я бы внимательно посмотрел на (для шифрования обычно используются открытые ключи) и (для дешифрования обычно используются закрытые ключи). Думаю они убираются при выходе из блока .

Этот вопрос старый, но для тех, кто ищет решение, продолжая использовать и , вот как мне удается решить эту ошибку:

Основа моего сертификата была установлена ​​неправильно, дважды щелкнув файл и выбрав магазин.

Неправильный способ установки сертификата

1. Дважды щелкните сертификат:

2. Откроется мастер, нажмите следующую кнопку:

3. Мастер покажет расположение сертификатов, нажмите следующую кнопку:

4. Введите пароль и нажмите «Далее»:

5. Выберите магазин и нажмите «Далее»:

6. Мастер покажет информацию о сертификате, щелкните в Конец кнопка

7. Отображается диалог успеха:

Итак, на этом этапе у меня была ошибка «Клавиатура не существует».


Чтобы решить эту проблему, я поступил следующим образом (правильный путь)

1. Запустите консоль управления Microsoft (mmc.exe):

2. Пустой экземпляр MMC показал:

3. Щелкните в File-> Add / Remove Snap-in …

4. Выберите оснастку сертификата, щелкнув добавлять кнопка:

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

6. Выбрать Локальный компьютер затем нажмите в Конец кнопка:

7. Оснастка сертификата теперь добавлена, щелкните в в порядке кнопка:

8. Выберите личный магазин, затем щелкните правой кнопкой мыши и выберите импорт:

9. Просмотрите сертификат и нажмите «Далее»:

10. Введите пароль, затем щелкните следующий кнопка:

11. Автоматически выбрать хранилище сертификатов:

12. Информация о сертификате показывает:

13. В диалоговом окне успешного выполнения отображается:

14. Обновите консоль MMConsole, чтобы отобразить сертификат:

15. Щелкните сертификат правой кнопкой мыши, затем щелкните в Управление закрытыми ключами …:

16. Добавьте идентификатор пула или пользователя IIS, в моем случае я добавил IIS_IUSRS:

17. Пользователь добавлен, нажмите в порядке кнопка:

И все готово, клавиатура делает существовать сейчас!!

  • 20 Вы могли бы значительно упростить свой ответ, сказав, что «у пользователя нет разрешений на закрытый ключ, поэтому вам необходимо предоставить ему разрешения». Решение не зависит от того, как вы импортируете сертификат (нет «правильного» или «неправильного» способа импорта). Спасибо за последний шаг в решении!
  • 7 У меня тоже была эта проблема, и проблема заключалась в установке разрешений на сертификат! Спасибо за отличный ответ; скриншоты ftw!
  • 2 Обычно это проблема с разрешениями. Вам необходимо предоставить разрешения на чтение учетной записи пользователя, под которой работает приложение / служба.
  • 3 В моем случае установка сертификата из консоли MMC сработала. Установка двойным щелчком по файлу .PFX не выполнялась.
  • 1 Позиции 15 и 16 являются важными.

Приложение может пытаться записать по следующему пути к папке: C: Documents and Settings All Users Application Data Microsoft Crypto RSA MachineKeys

Если ваше приложение использует олицетворение или пользователя IUSR_MACHINENAME, настройте параметры папки MachineKeys и предоставьте пользователю Read & Execute, List Folder Contents, Read, Write. Если это не сработает, попробуйте предоставить пользователю «Все» одинаковые разрешения.

  • Я попытался предоставить разрешение на запись в каталог MachineKeys для «всех», но по-прежнему отображалось то же сообщение об ошибке.
  • Насколько я понимаю, указанная выше папка MachineKeys имеет ограниченные разрешения по уважительной причине: она должна находиться под управлением операционной системы. Вы не должны иметь к нему доступ напрямую.

Я получил ту же ошибку, что и OP: «System.Security.Cryptography.CryptographicException: набор ключей не существует»

Разрешение (для меня) было: Visual Studio должна быть (запускаться как администратор)

Как мне объяснили (YMMV), VS необходимо запускать от имени администратора, чтобы извлечь закрытый ключ сертификатов из хранилища ключей, чтобы согласовать аутентификацию / рукопожатие с keyvault.

  • Спасибо! Это «решило» это для меня. Единственная проблема в том, что я не могу запустить приложение от имени администратора.
  • @PalleDue, ваше приложение не должно запускаться от имени администратора, его просто нужно запускать с учетными данными пользователя / службы, которые были авторизованы в сертификате, иначе вам может потребоваться переосмыслить архитектуру аутентификации ваших приложений. Это решение также может работать, если вы авторизуетесь для сертификата без запуска VS как администратора, в зависимости от того, где установлен сертификат.

Я считаю, что при использовании Encrypt и Decrypt он ожидает открытый ключ для шифрования и закрытый ключ для дешифрования. Таким образом, это не удается, потому что вы пытаетесь расшифровать без закрытого ключа, и это вызывает исключение.

Вам действительно следует использовать метод SignData для создания подписи и VerifyData для проверки.

  • Получателей слишком много, и лучше, чтобы отправитель предоставил открытый ключ (для получателей) и закрытый ключ (для себя).
  • Вы правы, я изменил свой код, чтобы использовать CreateSignature вместо шифрования, и это могло работать и давать правильный результат. Спасибо.:-)

Я столкнулся с той же проблемой. Сообщение не идеально, и в моем случае у моего пользователя не было разрешения на доступ к закрытому ключу. Вы можете исправить это, выполнив следующие действия:

  1. Открыть mmc
  2. Добавить оснастку сертификата
  3. выберите сертификат, который хотите использовать
  4. Щелкните его правой кнопкой мыши и выберите «Все задачи» / «Управление закрытыми ключами …»
  5. Добавьте своего пользователя в список авторизованных пользователей и разрешите «Полный доступ»

Попробуйте запустить vs от имени администратора. Работал на меня

Я столкнулся с этой ошибкой, когда не загружал PrivateKey из своего сертификата в SigningKey signedXmlElement при попытке подписать ответ SAML.


В моем случае закрытый ключ хранился в папке , а не в папке machinekeys — вы можете проверить с помощью certutil, чтобы узнать «Уникальное имя контейнера», которое будет закрытым ключом.

Теперь я просматриваю криптографический каталог, чтобы найти совпадение. С этим совпадением я могу установить правильный ACL для соответствующего файла

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • System restore 8193 ошибка
  • System resource notify window ошибка приложения