Ошибка 0x80090019 2148073497 набор ключей не определен

Форум КриптоПро
 » 
Устаревшие продукты
 » 
КриптоПро CSP 3.0
 » 
Ошибка подписи ключа 0x80090019(Набор ключей не определен.)


Offline

The_Immortal

 


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

22 марта 2012 г. 14:40:04(UTC)

The_Immortal

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

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

Зарегистрирован: 15.03.2012(UTC)
Сообщений: 11

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

КриптоПРО CSP КС1 3.0.3293
Континент-АП 3.5.67.0

Казначейство выдало новый сертификат. Установили его согласно инструкции: правой кнопкой на значке Континента — Сертификаты — установить сертификат — выбрали пользовательский сертификат с дискеты (где также присутствует корневой сертификат и папочка с ключами) — получили «Импорт пользовательского сертификата успешно завершен». Далее снова правой кнопкой на континенте — «Установить соединение» и вот на это вылазят одна за другой следующие ошибки:

«Ошибка подписи ключа 0x80090019(Набор ключей не определен.)»
«Сервер отказал в доступе пользователю. Причина отказа: Client-Cert not found»

И вся работа бухгалтерии встала…

Кто-нибудь сталкивался с подобным? :(

Спасибо!


Вверх


Offline

Femi

 


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

22 марта 2012 г. 14:43:20(UTC)

Наталья Мовчан

Статус: Padawan

Группы: Администраторы

Зарегистрирован: 02.12.2010(UTC)
Сообщений: 1,378
Женщина
Российская Федерация
Откуда: Москва

Сказала «Спасибо»: 11 раз
Поблагодарили: 67 раз в 45 постах

А сертификат в Личном появился? с привязкой к закрытому ключу? Попробуйте устновить его через КриптоПро CSP -Сервис-Установить личный сертификат.
Не поможет- лучше спросить разработчиков.

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


Вверх


Offline

The_Immortal

 


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

22 марта 2012 г. 15:35:15(UTC)

The_Immortal

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

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

Зарегистрирован: 15.03.2012(UTC)
Сообщений: 11

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

Несколько раз поребутил копм и все нормально стало… Непонятно в чем проблема… По идее в Континенте как раз?


Вверх


Offline

Femi

 


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

22 марта 2012 г. 16:48:32(UTC)

Наталья Мовчан

Статус: Padawan

Группы: Администраторы

Зарегистрирован: 02.12.2010(UTC)
Сообщений: 1,378
Женщина
Российская Федерация
Откуда: Москва

Сказала «Спасибо»: 11 раз
Поблагодарили: 67 раз в 45 постах

Ну если сертификат таки

Цитата:

сертификат в Личном появился? с привязкой к закрытому ключу

то видимо да

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


Вверх


Offline

lupsik

 


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

6 сентября 2012 г. 12:41:47(UTC)

lupsik

Статус: Новичок

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

Зарегистрирован: 06.09.2012(UTC)
Сообщений: 1
Откуда: Мурманск

надо в криптопро сбросить пароли и в континенте в настройках соединение континента во вкладке безопасность сбросить запомненные сертификаты (как то так)

потом просто добавить сертификат заново и всё будует чики пуки =)


Вверх


Offline

Anglemender

 


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

26 апреля 2016 г. 10:05:45(UTC)

Anglemender

Статус: Новичок

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

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

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

Работая с крипто про, особенно если приходится работать с разными ЭЦП, в том числе если носители не только рутокены, а и флешки, то периодически появляются различные ошибки в том числе и эта(ошибка 0х800900019 . . . .), спасение «Сервис» — «Удалить запомненные пароли» — «чикбокс — удалить все запомненные пароли пользователя», в некоторых случаях повторно установить сертификат.
И все должно заработать нормально.


Вверх

WWW


Offline

Boris@Serezhkin.com

 


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

26 апреля 2016 г. 11:30:14(UTC)

Boris@Serezhkin.com

Статус: Активный участник

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

Зарегистрирован: 26.08.2010(UTC)
Сообщений: 259
Откуда: Moscow

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 11 раз в 10 постах

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

Работая с крипто про, особенно если приходится работать с разными ЭЦП, в том числе если носители не только рутокены, а и флешки, то периодически появляются различные ошибки в том числе и эта(ошибка 0х800900019 . . . .), спасение «Сервис» — «Удалить запомненные пароли» — «чикбокс — удалить все запомненные пароли пользователя», в некоторых случаях повторно установить сертификат.
И все должно заработать нормально.

Это здорово, тоже не раз сталкивался. Всем пользователям рекомендую переустановить сертификат. По статистике данная ситуевина возникает только при ключах на отчуждаемых носителях.
Boo hoo! Откуда растут ноги?
Имхо: Просто система при подключении «Федерального Легитимного Электронного Носителя» (флэшки) дает ему первую из свободных буковок, и при подключении не в том порядке получаем ключи на устройстве «f» вместо «e», соответственно наша мама их не видит.
Sick Своим рекомендую, настойчиво: компьютер — управление — управление дисками — дать флэшке буковку «M» и переустановить сертификат.
Drool Вопрос к «дэвушке с пэрсиком»: А может ли КриптоПро искать ключ не по буковке, а по другим характеристикам «Федерального Легитимного Электронного Носителя»?


Вверх


Offline

Максим Коллегин

 


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

26 апреля 2016 г. 14:41:30(UTC)

Максим Коллегин

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

Группы: Администраторы

Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,332
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 21 раз
Поблагодарили: 682 раз в 601 постах

Давно же есть опция — не сохранять информацию о подключенных съемных носителях. Если её использовать — проблем быть не должно. В 3.9 активна по умолчанию.

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

Alex_04

 


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

22 июня 2016 г. 6:47:44(UTC)

Alex_04

Статус: Активный участник

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

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

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

Тема старая, но актуальна время от времени до сих пор, причем и с Криптопро-3.6 и с Континент-АП 3.6.х.

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

«Ошибка подписи ключа 0x80090019(Набор ключей не определен.)»
«Сервер отказал в доступе пользователю. Причина отказа: Client-Cert not found»

Еще одна причина данной ошибки может оказаться банальной: сертификат пользователя не зарегистрирован на сервере доступа Континента в ОрФК. Было так несколько раз. Выше предложенный меры не помогали.


Вверх

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

Guest

Форум КриптоПро
 » 
Устаревшие продукты
 » 
КриптоПро CSP 3.0
 » 
Ошибка подписи ключа 0x80090019(Набор ключей не определен.)

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

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

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

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

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

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

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

Ряд пользователей программного продукта Континент АП, обновивших программу для работы со средствами криптографической защиты Крипто-Про до версии 4.0 и выше или изначально установившие её на свое рабочее место, столкнулись с ошибкой Ошибка подписи ключа 0x80090010 (Отказано в доступе). При этом нормальная работа в системе Континент АП нарушается, использовать сертификат для подписи и отправки документов не представляется возможным. Отметим, что с более ранними версиями Крипто-Про, начиная с 3.6 и до релизов версии 3.9 такие ошибки возникают в основном по следующим причинам:

1. Истек срок действия закрытого ключа (сертификата). Узнать актуальный срок действия сертификата можете, открыв программу Крипто-Про CSP — Просмотреть сертификаты в контейнере — Выбрать нужный сертификат — Ок. Если срок действия сертификата истек — вам нужно получить новый. Если же сертификат был выдан сроком на 2 и более лет и с момента его выпуска прошло 15 и более месяцев и при этом у вас установлено ПО Крипто-Про 4.0 и выше — то мы имеем дело как раз с тем самым редким случаем, присущим 4-й версии. О нем ниже.

2. Отсутствие прав доступа к накопителю, на котором находится ключ. Также случается редко, но случается, в основном на ОС Windows 10 и 8.1. Необходимо дать права доступа на флешку или добавить этот диск в исключения антивируса.

3. Отсутствие прав доступа на реестр защищенных ключей. Это для тех случаев, когда ключ установлен в реестре считывателей и у пользователя, работающего с Континент АП не хватает прав доступа к соответствующей ветке — тогда может возникать ошибка подписи ключа 0x80090010. Проверить права доступа легко через команду regedit, пройдя по пути:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\Users\{SID_пользователя}\Keys

Электронная подпись

Идет поиск…

Ничего не найдено. Попробуйте изменить поиск

123123

Возможные ошибки при работе с ЭЦП

Код ошибки Текст ошибки Как исправить
0x8010006E Действие было отменено пользователем Выберите нужный сертификат и нажмите Проверить. Согласитесь с подтверждением доступа. Введите пароль от сертификата, если он есть. 
0x80090016 Набор ключей не существует

Повторно добавьте сертификат в Личное хранилище по статье Установить «КриптоПро» CSP 5.0

Если проблема не решена, то переустановите «КриптоПро ЭЦП Browser Plug-in». 

0x8007065B Ошибка исполнения функции

Проверьте текущую версию КриптоПро CSP. Она должна быть 5.0 и выше. 

Если версия меньше, то обновите приложение. 
www.cryptopro.ru/products/csp/downloads
 

Если версия выше, то переустановите «КриптоПро ЭЦП Browser Plug-in».  

0x80090008 Указан неправильный алгоритм
0x8007064A Данные настройки для этого продукта повреждены. Обратитесь в службу поддержки организации

Проверьте статус лицензий КриптоПро CSP. Для этого откройте КриптоПро CSP. Информация о статусе лицензии отображается в главном разделе приложения в строке «Срок действия»

Если лицензия истекла, то купите и активируйте новую. 

Если лицензия не истекла, то переустановите сертификаты и «КриптоПро ЭЦП Browser Plug-in». 

0x80090010 Отказано в доступе
0x80090019 Набор ключей не определен

Повторно добавьте сертификат в Личное хранилище по статье Установить «КриптоПро» CSP 5.0

Если проблема не решена, то переустановите «КриптоПро ЭЦП Browser Plug-in». 

0x80092004

Ошибка установки свойства в контекст сертификата.

Ошибка получения свойства сертификата.

Объект или свойство не найдено.

0xc0000225
 
ЭЦП не использует КриптоПровайдер

Запустите на ПК командную строку (cmd) от имени администратора и пропишите там:

regsvr32 cpcng

Нажмите «Enter», закройте командную строку.

Перезагрузите ПК. 

Неожиданно: CMS Decrypt Error Электронная подпись соответствует требованиям

Обратитесь в удостоверяющий центр, выпустивший сертификат для уточнения соответствия требованиям к ЭЦП:
 

  1. Подпись создаёт ключи шифрования по алгоритму ГОСТ 34-10.2012 длиной 256 бит.
  2. Параметр CKA_DERIVE имеет значение true.
  3. Значения ParamSet у сертификата и ключей совпадают. По стандарту неважно, какое значение ставить, но важно, чтобы значения совпадали.
  4. Подпись имеет полные права на шифрование.

Личный кабинет не дает выбрать сертификат УКЭП

Если в личном кабинете Эвотор не получается выбрать ЭЦП. Проверьте, корректно ли настроена работа с ЭЦП на компьютере. Настроить работу с ЭЦП на компьютере

Если инструкция не помогла, обратитесь в поддержку Эвотора.

Эвотор не даёт выбрать сертификат УКЭП

Иногда при настройке «Маркировки» на Эвоторе нельзя выбрать сертификат по умолчанию — список сертификатов пуст. Рассказываем про возможные проблемы и их решение в статье: Эвотор не даёт выбрать сертификат УКЭП

Страницы 1 2 Далее

Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться

RSS: текущая тема

Сообщений с 1 по 15 из 26

#1 2015-10-29 15:27:23

  • SvetovidovDM
  • Посетитель
  • Неактивен

Импорт ключа

Добрый день. Я реализую шифрование сообщения при помощи открытого ключа получателя и закрытого отправителя.
Отправитель — сертификат с закрытым ключом сформированный через КриптоПро CSP
Получатель — сертификат с закрытым ключом. Закрытый ключ расположен на токене РутокенЭЦП

Алгоритм моих действий следующий:
1. Получаем из сертификата получателя BLOB открытого ключа следующим образом:

    if(dwError==ERROR_SUCCESS)
    {
        //Импортируем открытый ключ
        if(m_pcryptoAPI->CryptImportPublicKeyInfoEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
            &(pRecipientCert->pCertInfo->SubjectPublicKeyInfo),
            0,
            0,
            NULL,
            &hRecipientPublicKey))
        {
            //Экспортируем открытый ключ в BLOB
            if(m_pcryptoAPI->CryptExportKey(hRecipientPublicKey,
                NULL,PUBLICKEYBLOB,NULL,pbtPublicKeyBlob,&nPublicKeyBlobSize))
            {
                pbtPublicKeyBlob=new BYTE[nPublicKeyBlobSize];
                if(pbtPublicKeyBlob==NULL)
                    dwError=E_OUTOFMEMORY;
                else
                {
                    if(!m_pcryptoAPI->CryptExportKey(hRecipientPublicKey,
                        NULL,PUBLICKEYBLOB,NULL,pbtPublicKeyBlob,&nPublicKeyBlobSize))
                        dwError=::GetLastError();

                    //Уничтожаем объект открытого ключа, т.к. в дальнейшем будем использовать только его BLOB
                    m_pcryptoAPI->CryptDestroyKey(hRecipientPublicKey);
                    hRecipientPublicKey=NULL;
                }
            }
            else
                dwError=::GetLastError();
        }
        else
            dwError=::GetLastError();

    }

2. Получаем закрытый ключ отправителя так:

    if(dwError==ERROR_SUCCESS)
    {
        //Получаем закрытый ключ отправителя
        if(!m_pcryptoAPI->CryptGetUserKey(AT_KEYEXCHANGE,&hSenderPrivateKey))
            dwError=::GetLastError();
    }

3. Импортируем открытый ключ получателя на закрытый отправителя

        if(dwError==ERROR_SUCCESS)
    {
        //получаем ключ согласования импортом открытого ключа получателя на закрытый отправителя 
        if(m_pcryptoAPI->CryptImportKey(pbtPublicKeyBlob,nPublicKeyBlobSize,hSenderPrivateKey,NULL,&hAgreeKey))
        {
                }
                else    
                    dwError=::GetLastError();
     }

На шаге №3 получаем ошибку 0x80090019 (-2146893799) набор ключей не определен
При этом, если в качестве получателя используется сертификат, закрытый ключ от которого расположен в реестре или на обычной флэшке (сформированный через КриптоПро), то все превосходно отрабатывает.
Вопрос в том, что не так.

#2 Ответ от Кирилл Мещеряков 2015-10-29 17:54:51

  • Кирилл Мещеряков
  • Посетитель
  • Неактивен

Re: Импорт ключа

Добрый день.
Вопрос скорее на форум крипто-про, но думаю вам стоит сначала открыть контекст (CryptAquireContext) с именем контейнера.

Сначала делаете так: http://www.cryptopro.ru/forum2/default. … #post12010
А потом как то так:
CryptAcquireContext( &phProv,»\\\\.\\Aktiv Rutoken ECP 0\\test_key»,»»Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider»»,75,0)

#3 Ответ от SvetovidovDM 2015-10-29 18:09:51 (2015-10-29 18:13:20 отредактировано SvetovidovDM)

  • SvetovidovDM
  • Посетитель
  • Неактивен

Re: Импорт ключа

Кирилл Мещеряков пишет:

Добрый день.
Вопрос скорее на форум крипто-про, но думаю вам стоит сначала открыть контекст (CryptAquireContext) с именем контейнера.

Сначала делаете так: http://www.cryptopro.ru/forum2/default. … #post12010
А потом как то так:
CryptAcquireContext( &phProv,»\\\\.\\Aktiv Rutoken ECP 0\\test_key»,»»Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider»»,75,0)

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

На машине нет закрытого ключа получателя в принципе. Есть только сертификат .cer.

Опять таки повторюсь, что если сертификат получателя сформирован при помощи КриптоПро то проблем не возникает, и тот же самый код прекрасно работает и шифрует данные, что наводит меня на мысль что существует некая разница в ключах. Но как понять что это за разница, и как с ней бороться я не знаю.
Аналогичный вопрос на форуме КриптоПро я задал.
Но к сожалению не очень точно сформулировал проблему, в результате чего ответ получил не тот который я ожидал…

#4 Ответ от Кирилл Мещеряков 2015-10-29 18:11:43

  • Кирилл Мещеряков
  • Посетитель
  • Неактивен

Re: Импорт ключа

Как на рутокене то у вас оказывается ключ?

#5 Ответ от SvetovidovDM 2015-10-29 18:29:17 (2015-10-29 18:29:31 отредактировано SvetovidovDM)

  • SvetovidovDM
  • Посетитель
  • Неактивен

Re: Импорт ключа

Кирилл Мещеряков пишет:

Как на рутокене то у вас оказывается ключ?

Генерируется средствами PKCS11 библиотеки, от вашего SDK.
Впрочем разницы нет, потому как при реальной эксплуатации будет так:
В дистрибутиве приложения будет лежать сертификат. Когда необходимо зашифровать данные, приложение будет брать этот сертификат, читать его, получать из него блоб открытого, получать ключ согласования этого блоба и выбранного пользователем сертификата отправителя, генерировать сессионный ключ, шифровать им сообщение, после чего шифровать сам сессионный ключ на ключе согласования и отправлять зашифрованные данные на сервер вместе с открытым ключем отправителя и зашифрованным сессионным ключом. Ну а на сервере процедура будет происходить в обратном порядке.

#6 Ответ от Кирилл Мещеряков 2015-10-29 18:30:10

  • Кирилл Мещеряков
  • Посетитель
  • Неактивен

Re: Импорт ключа

А ну понятно, а то вы не написали что через PKCS11, я то подумал что тоже через КриптоПро CSP.

Попробуйте «перевернуть» открытый ключ (изменить порядок байт).

#7 Ответ от SvetovidovDM 2015-10-29 18:34:07

  • SvetovidovDM
  • Посетитель
  • Неактивен

Re: Импорт ключа

Кирилл Мещеряков пишет:

А ну понятно, а то вы не написали что через PKCS11, я то подумал что тоже через КриптоПро CSP.

Попробуйте «перевернуть» открытый ключ (изменить порядок байт).

В таком случае возникает вопрос — как мне ориентироваться, надо ли его переворачивать?:) Есть ли некий флаг или поле в сертификате, говорящее о необходимости «перевернуть» ключ?

#8 Ответ от Кирилл Мещеряков 2015-10-29 18:43:10

  • Кирилл Мещеряков
  • Посетитель
  • Неактивен

Re: Импорт ключа

Неа, нету.
Так как речь идет просто о числе, то зависит от спецификации, как оно будет представлено, в виде littleendian или bigendian.
Насколько я знаю, в PKCS11 и CryptoAPI получилось вразнобой.

#9 Ответ от SvetovidovDM 2015-10-30 11:50:04

  • SvetovidovDM
  • Посетитель
  • Неактивен

Re: Импорт ключа

Кирилл Мещеряков пишет:

А ну понятно, а то вы не написали что через PKCS11, я то подумал что тоже через КриптоПро CSP.

Попробуйте «перевернуть» открытый ключ (изменить порядок байт).

Переделал код так:

                //получаем ключ согласования импортом открытого ключа получателя на закрытый отправителя
        if(!m_pcryptoAPI->CryptImportKey(pbtPublicKeyBlob,nPublicKeyBlobSize,hSenderPrivateKey,NULL,&hAgreeKey))
        {
            dwError=GetLastError();
            if(dwError==0x80090019)
            {
                DWORD dwKeyLen=((CRYPT_PUBLICKEYBLOB*)pbtPublicKeyBlob)->stPublicKeyParam.KeyParam.BitLen/8;
                BYTE *pbtKey=&((CRYPT_PUBLICKEYBLOB*)pbtPublicKeyBlob)->bPublicKey[0];
                DWORD dwIdxBeg=0;
                DWORD dwIdxEnd=dwKeyLen-1;
                BYTE bTemp;
                while(dwIdxBeg<=dwIdxEnd)
                {
                    bTemp=pbtKey[dwIdxBeg];
                    pbtKey[dwIdxBeg]=pbtKey[dwIdxEnd];
                    pbtKey[dwIdxEnd]=bTemp;
                    dwIdxBeg++;
                    dwIdxEnd--;
                }
                if(!m_pcryptoAPI->CryptImportKey(pbtPublicKeyBlob,nPublicKeyBlobSize,hSenderPrivateKey,NULL,&hAgreeKey))
                    dwError=GetLastError();
                else
                    dwError=ERROR_SUCCESS;
            }

Эффект тот же самый, ошибка та же…

#10 Ответ от Кирилл Мещеряков 2015-10-30 13:21:57

  • Кирилл Мещеряков
  • Посетитель
  • Неактивен

Re: Импорт ключа

Криптография непростая штука.
Нужно соблюдать кучу условий, чтобы сложные вычисления приводили к ожидаемому результату.
Например, мы не знаем, что у вас за ключи на токене, как вы их получили, какие парамсеты у эллиптических кривых?
Без этого сложно что-то советовать.

#11 Ответ от SvetovidovDM 2015-10-30 13:25:51 (2015-10-30 13:26:51 отредактировано SvetovidovDM)

  • SvetovidovDM
  • Посетитель
  • Неактивен

Re: Импорт ключа

Кирилл Мещеряков пишет:

Криптография непростая штука.
Нужно соблюдать кучу условий, чтобы сложные вычисления приводили к ожидаемому результату.
Например, мы не знаем, что у вас за ключи на токене, как вы их получили, какие парамсеты у эллиптических кривых?
Без этого сложно что-то советовать.

Ну сертификат я могу прислать. Если интересуют параметры указанные при генерации ключей — тоже могу прислать.
В общем скажите что нужно — отправлю.
Получал через тестовый контур Электронной Москвы (smvmsk)

#12 Ответ от Кирилл Мещеряков 2015-10-30 13:31:24

  • Кирилл Мещеряков
  • Посетитель
  • Неактивен

Re: Импорт ключа

Нужен код, создающий ключи на Рутокене ЭЦП и извлекающий открытый ключ. Параметры КриптоПро CSP не нужны.

#13 Ответ от SvetovidovDM 2015-10-30 13:37:28 (2015-10-30 13:41:11 отредактировано SvetovidovDM)

  • SvetovidovDM
  • Посетитель
  • Неактивен

Re: Импорт ключа

Кирилл Мещеряков пишет:

Нужен код, создающий ключи на Рутокене ЭЦП и извлекающий открытый ключ. Параметры КриптоПро CSP не нужны.

Ну весь код выкладывать не буду, он слишком большой. Параметры ключей — легко.

    CK_BYTE         btTrue = 0x01;
    CK_BYTE         btFalse = 0x00;
    BYTE            abtParamSetGostR3410[] = { 0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01 };
    BYTE            abtParamSetGostR3411[] = { 0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x1E, 0x01 };
    CK_MECHANISM    stMechanizm = { CKM_GOSTR3410_KEY_PAIR_GEN, NULL, 0 };
    CK_KEY_TYPE        lKeyType = CKK_GOSTR3410;
    CK_OBJECT_CLASS    lPublicKeyClass = CKO_PUBLIC_KEY;
    CK_OBJECT_CLASS    lPrivateKeyClass = CKO_PRIVATE_KEY;
    CK_ATTRIBUTE    stAttrPublicKey[] = 
    {
        { CKA_CLASS, &lPublicKeyClass, sizeof( lPublicKeyClass ) },
        { CKA_KEY_TYPE, &lKeyType, sizeof( lKeyType ) },
        { CKA_TOKEN, &btTrue, sizeof( btTrue ) },
        { CKA_PRIVATE, &btFalse, sizeof( btFalse ) },
        { CKA_ID, ( CK_CHAR* )(( const char* )astrID ), ( CK_ULONG )astrID.GetLength() },
        { CKA_LABEL, ( CK_CHAR* )(( const char* )astrKeyLabel ), ( CK_ULONG )astrKeyLabel.GetLength() },
        { CKA_SUBJECT, ( CK_CHAR* )(( const char* )astrSubject ), ( CK_ULONG )astrSubject.GetLength() },
        { CKA_GOSTR3410_PARAMS, &abtParamSetGostR3410[0], sizeof( abtParamSetGostR3410 ) / sizeof( abtParamSetGostR3410[0] ) },
        { CKA_GOSTR3411_PARAMS, &abtParamSetGostR3411[0], sizeof( abtParamSetGostR3411 ) / sizeof( abtParamSetGostR3411[0] ) },
        { CKA_ENCRYPT, &btTrue, sizeof(btTrue)},  //*   
        { CKA_DERIVE, &btTrue, sizeof(btTrue)},      //*
        { CKA_VERIFY, &btTrue, sizeof( btTrue ) },
    };

    CK_ATTRIBUTE    stAttrPrivateKey[] = 
    {
        { CKA_CLASS, &lPrivateKeyClass, sizeof( lPrivateKeyClass ) },
        { CKA_KEY_TYPE, &lKeyType, sizeof( lKeyType ) },
        { CKA_TOKEN, &btTrue, sizeof( btTrue ) },
        { CKA_PRIVATE, &btTrue, sizeof( btTrue ) },
        { CKA_ID, ( CK_CHAR* )(( const char* )astrID ), ( CK_ULONG )astrID.GetLength() },
        { CKA_LABEL, ( CK_CHAR* )(( const char* )astrKeyLabel ), ( CK_ULONG )astrKeyLabel.GetLength() },
        { CKA_SUBJECT, ( CK_CHAR* )(( const char* )astrSubject ), ( CK_ULONG )astrSubject.GetLength() },
        { CKA_GOSTR3410_PARAMS, &abtParamSetGostR3410[0], sizeof( abtParamSetGostR3410 ) / sizeof( abtParamSetGostR3410[0] ) },
        { CKA_GOSTR3411_PARAMS, &abtParamSetGostR3411[0], sizeof( abtParamSetGostR3411 ) / sizeof( abtParamSetGostR3411[0] ) },
        { CKA_DECRYPT, &btTrue,sizeof(btTrue) },    //*
        { CKA_DERIVE, &btTrue,sizeof(btTrue)  },    //*
        { CKA_SIGN, &btTrue, sizeof( btTrue ) },
    };

    //Параметры помеченные * внесены для тестирования плагина ИС НР. Возможно они будут добавлены и в основную реализацию
    CK_OBJECT_HANDLE    hPublicKey = ( CK_OBJECT_HANDLE )NULL;
    CK_OBJECT_HANDLE    hPrivateKey = ( CK_OBJECT_HANDLE )NULL;
    CK_RV    lRetCode = pstFL->C_GenerateKeyPair( m_hSession,
        &stMechanizm,
        &stAttrPublicKey[0],
        sizeof( stAttrPublicKey ) / sizeof( stAttrPublicKey[0] ),
        &stAttrPrivateKey[0],
        sizeof( stAttrPrivateKey ) / sizeof( stAttrPrivateKey[0] ),
        &hPublicKey,
        &hPrivateKey );

Извлечение ключа:

    // Берём значение открытого ключа
    CK_ATTRIBUTE    stAttrValue[] = { { CKA_VALUE, NULL, 0 } };
    if( lRetCode == CKR_OK )
        lRetCode = pstFL->C_GetAttributeValue( m_hSession, hPublicKey, &stAttrValue[0], sizeof( stAttrValue ) / sizeof( stAttrValue[0] ));
    if( lRetCode == CKR_OK )
    {
        stAttrValue[0].pValue = ( stAttrValue[0].ulValueLen != 0 ? new BYTE[stAttrValue[0].ulValueLen] : NULL );
        if( stAttrValue[0].pValue == NULL )
            lRetCode = CKR_HOST_MEMORY;
        else
        {
            lRetCode = pstFL->C_GetAttributeValue( m_hSession, hPublicKey, &stAttrValue[0], sizeof( stAttrValue ) / sizeof( stAttrValue[0] ));
            if( lRetCode == CKR_OK )
            {
                CKeyInfo*    pkeyInfo = new CKeyInfo( astrID, astrID.GetLength(), astrKeyLabel, astrKeyLabel.GetLength(),
                    ( BYTE* )stAttrValue[0].pValue, stAttrValue[0].ulValueLen );
                if( pkeyInfo != NULL )
                    m_posKeyInfo = m_listKeyInfos.AddTail( pkeyInfo );
            }

            delete [] ( BYTE* )stAttrValue[0].pValue;
        }
    }

    DWORD    dwErrorCode = ( lRetCode != CKR_OK ? ( 0x11000000 | lRetCode ) : ERROR_SUCCESS );
    return( dwErrorCode );

#14 Ответ от Oleg Taraskin 2015-11-02 14:19:24

  • Oleg Taraskin
  • Посетитель
  • Неактивен

Re: Импорт ключа

Добрый день !

Создайте два контейнера КриптоПро CSP. 
Соберите и запустите пример по выработке общего ключа DH, который есть в примерах КриптоПро CSP SDK (пример называется ExportingSessionKey ) и попробуйте создать общей сессионный ключ для этих двух контейнеров.

Если пример сработает, то проведите такой эксперимент: скопируйте значение открытого ключа из PKCS#11 (64 байта)
не переворачивая в один из блобов перед импортом в криптопро по смещению 36 байт от начала блоба.
Если импорт пройдет, то будем думать что делать дальше :)

С уважением,
Олег Тараскин

#15 Ответ от SvetovidovDM 2015-11-02 15:43:58

  • SvetovidovDM
  • Посетитель
  • Неактивен

Re: Импорт ключа

Выяснил, что в работающем и неработающем ключе разные параметры кривых.
В рабочем (сгенерированный с помощью КриптоПро CSP

SEQUENCE(2 elem)
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER1.2.643.2.2.19
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER1.2.643.2.2.36.0
      OBJECT IDENTIFIER1.2.643.2.2.30.1
BIT STRING(1 elem)
   OCTET STRING(64 byte) DEF9414282AAC2CF4D7B822F0790C39404A3F804C078821A9957DEA4DC30EE466390E0…

В нерабочем (Сгереированный с помощью PKCS#11)

SEQUENCE(2 elem)
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER1.2.643.2.2.19
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER1.2.643.2.2.35.1
      OBJECT IDENTIFIER1.2.643.2.2.30.1
BIT STRING(1 elem)
   OCTET STRING(64 byte) 295550871C46A9C208E519463D60D68F664A496BACCBB50A1C0112F12081BA255A5320…

Вопрос — можно лии их согласовать каким то образом?

Страницы 1 2 Далее

Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться

Загрузка больничных из ФСС в УПП ☑ 0

John83

07.10.21

13:21

Когда-то настроил обмен больничных с ФСС, все работало исправно.

И буквально на прошлой неделе перестали загружаться данные

Пишет

Объект CryptS : Ошибка генерации ключа согласования. 0x80090019 (80090019) Набор ключей не определен. .

Не удалось зашифровать файл выгрузки:

Ошибка при вызове метода контекста (Зашифровать)

Попробовал переустановить все сертификаты — не помогло.

https://its.1c.ru/db/elreps/content/15/hdoc

Что еще попробовать?

1

John83

07.10.21

13:49

2

АлехИв

07.10.21

14:15

Третий сертификат у моих другой, по времени тоже отличается.

3

John83

07.10.21

14:36

(2) а там откуда сертификаты брали?

по той же ссылке ИТС?

4

АлехИв

07.10.21

14:39

У этого клиента буду только во вторник, вся инфа там.

5

comp2006

07.10.21

14:41

_https://lk.fss.ru/cert.html

4-ФСС   —   Фонд социального страхования Российской Федерации (30.06.2021 14:49:00 — 30.06.2022 14:49:00)

ЭЛН     —   Фонд социального страхования Российской Федерации (30.06.2021 14:08:00 — 30.06.2022 14:08:00)

6

comp2006

07.10.21

14:42

4-ФСС Отпечаток — 44dec15a884e55b68090c5f40eeb9c2037421009

ЭЛН   Отпечаток — ee126b38319a010f398a238225454bcb7f562420

7

John83

08.10.21

12:03

(5) оказалось, что сертификат ЭЛН надо устанавливать не в «личное», как написано в инструкции, а в «другие пользователи»

спасибо!!!

Понравилась статья? Поделить с друзьями:
  • Ошибка 0x8009000d 2148073485 ключ не существует
  • Ошибка 0x80092004 криптопро
  • Ошибка 0x80090020 внутренняя ошибка криптопро
  • Ошибка 0x8009000b контейнер является неэкспортируемым его копирование невозможно
  • Ошибка 0x80090326 sstp